2008-10-16 19 views
1

我一直在尋找java.uti.concurrent.locks.AbstractQueuedSynchronizer的源代碼和獲取()方法看起來是這樣的 -爲什麼AbstractQueuedSynchronizer的中斷上acquring鎖

public final void acquire(int arg) { 
    if (!tryAcquire(arg) && 
     acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) 
     Thread.currentThread().interrupt(); 
} 

它爲什麼會中斷線程調用acquire()?如果在線程run()方法中檢查了某處,那麼在調用acquire()之後它可能會傳遞,這可能是不受歡迎的,並且不符合要求?

任何人都在關注爲什麼上面這段代碼能做到這一點?

回答

4

如果您閱讀了Javadoc的,您會注意到,如果線程在等待期間中斷,它將返回true。因此,調用selfInterrupt(因爲它在OpenJDK源代碼中被調用)是將中斷傳播到調用線程,否則將被吞噬。