java / expert
Snippet
Virtual Thread Pinning und ReentrantLock
Virtuelle Threads können an ihren Carrier-Plattform-Thread 'gepinnt' werden, wenn sie innerhalb eines 'synchronized'-Blocks blockieren. Um hohen Durchsatz und Skalierbarkeit zu erhalten, sollten Entwickler 'synchronized' durch 'ReentrantLock' ersetzen, was dem virtuellen Thread erlaubt, korrekt zu unmounten.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
private final ReentrantLock lock = new ReentrantLock();public void safeExecution() {lock.lock();try {// Blocking I/O or long taskexternalService.call();} finally {lock.unlock();}}
Erklärung
1
private final ReentrantLock lock = new ReentrantLock();
Verwendung von ReentrantLock statt synchronized, um Pinning zu verhindern.
2
lock.lock(); ... lock.unlock();
Stellt sicher, dass der virtuelle Thread vom Scheduler suspendiert werden kann, während er auf den Lock wartet.