capypad
0 Tage Serie
java / expert
Snippet

Optimistisches Sperren mit StampedLock

StampedLock bietet einen 'optimistischen' Modus, bei dem keine echte Sperre gesetzt wird. Stattdessen wird ein 'Stamp' zurückgegeben, der später validiert werden muss. Falls während des Lesens ein Schreibvorgang stattfand, schlägt die Validierung fehl und es wird auf ein klassisches Read-Lock gewechselt.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
long stamp = lock.tryOptimisticRead();
int currentX = x, currentY = y;
if (!lock.validate(stamp)) {
stamp = lock.readLock();
try {
currentX = x; currentY = y;
} finally {
lock.unlockRead(stamp);
}
}
return Math.sqrt(currentX * currentX + currentY * currentY);
Erklärung
1
lock.tryOptimisticRead()
Versucht einen nicht-blockierenden Lesevorgang ohne tatsächliche Sperre.
2
lock.validate(stamp)
Prüft, ob die Sperre seit der Erstellung des Stamps von einem Schreib-Thread beansprucht wurde.
3
lock.readLock()
Der Fallback-Pfad, der eine vollständige pessimistische Lesesperre anfordert.