capypad
0 Tage Serie
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
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 task
externalService.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.