假設(shè)我有 2 個 a 實例CustomThread和一個名為printer. 在 的print方法內(nèi)部printer,如果我在最后執(zhí)行 alock.lock()和lock.unlock(),這是如何工作的?private class Printer{ private final Lock mutex = new ReentrantLock(true); public void print(int thread){ try { mutex.lock(); for(int i = 0; i < 10; ++i) { System.out.println(String.format("Printing: %d for Thread: %d", i, thread)); } } catch(Exception e){ } finally { mutex.unlock(); } } }我將從我的 2 個線程對象中調(diào)用此方法。我的問題是,方法lock本身如何?鎖不是基于線程的嗎?也許我在這里混淆了核心思想。當我在方法中加鎖時,這意味著什么?
1 回答

翻翻過去那場雪
TA貢獻2065條經(jīng)驗 獲得超14個贊
你可以把它想象成一個鎖有一個叫做 的字段owner
,它是一個Thread
.
當lock()
被調(diào)用,并且owner
是null
,owner
被分配到調(diào)用線程。當unlock()
被調(diào)用時,owner
被重置為null
。
當lock()
被調(diào)用并且owner
不是null
(并且不是當前線程,因為鎖是可重入的)時,調(diào)用線程會阻塞,直到另一個線程放棄所有權(quán)并且可以將其分配為新的所有者。
額外的復(fù)雜性是檢查當前所有權(quán)以及將當前線程有條件地分配為新所有者,這兩者都必須被其他線程原子地看到。這保留了鎖的完整性。
添加回答
舉報
0/150
提交
取消