Java多執行緒--重入鎖的實現原理
阿新 • • 發佈:2019-01-24
- protectedfinalboolean tryRelease(int releases) {
- int c = getState() - releases;
- if (Thread.currentThread() != getExclusiveOwnerThread())
- thrownew IllegalMonitorStateException();
- boolean free = false;
- if (c == 0) {
-
free = true
- setExclusiveOwnerThread(null);
- }
- setState(c);
- return free;
- }
如果該鎖被獲取了n次,那麼前(n-1)次tryRelease方法必須返回false,而只有同步狀態完全釋放了,才能返回true。可以看出,該方法只有在同步狀態為0的時候才會返回true,並將佔有執行緒設定為null,表示釋放成功。