講師回答 / Arthur
首先從語法上,lockObj換成energyBoxes是可以的,不過易讀性是否降低你要考慮了。第二點(diǎn),效率要讓位于安全。如果多個資源是無關(guān)的,自然可以不同的鎖來互斥(那為什么要放在同一個類里面呢?恐怕要反思設(shè)計了),如果資源對線程的訪問有嚴(yán)格的互斥約束,那么就不能有多個鎖對象。
2015-01-14
講師回答 / Arthur
在wait set中的對象并不會競爭lockObj。只有當(dāng)其他線程調(diào)用notifyAll后他們才有機(jī)會競爭lockObj。
2015-01-08
講師回答 / Arthur
問題還是回到interrupte()方法的初衷,這個方法是用來向線程發(fā)出中斷請求,而非停止線程的。當(dāng)然很多時候要停止線程就需要先給他一個中斷請求,然后讓線程處理中斷(比如處理InterruptedException)。在你提到的shutdownNow中,我們看到調(diào)用interruptWorkers()也是這個意思,讓所有的worker線程有機(jī)會處理中斷。緊接著,tryTerminate()回去做停止的工作。public List<Runnable> shutdownNow() {? ? ? ?...
2015-01-07
已采納回答 / Arthur
你可以理解為,run方法僅僅提供了業(yè)務(wù)邏輯,而線程運(yùn)行是有更復(fù)雜要求的。這一切都封裝在了Thread內(nèi)部。所以記住一定不要自己調(diào)用run,而是調(diào)用start方法。
講師回答 / Arthur
wait之后要釋放鎖的,然后喚醒并獲得了鎖之后,是從上一次調(diào)用wait()的地方之后開始執(zhí)行,這樣if將不能阻擋不合要求的處理。
2014-12-25
已采納回答 / Arthur
你得理解是正確的,這就是為什么使用了一個while循環(huán)來阻擋不符合條件的操作。每次被喚醒并獲得鎖后,都是從wait之后的地方繼續(xù)循環(huán)。
2014-12-23
講師回答 / Arthur
檢查一下是不是旗標(biāo)是聲明為volatile的嗎?
- 課程須知
- 本課程的學(xué)習(xí),需要小伙伴們具有面向?qū)ο蠡A(chǔ)知識及 Java 語言基礎(chǔ)。如果您是新手,建議先移步 《Java入門第一季》和《Java入門第二季》
- 老師告訴你能學(xué)到什么?
- 1、Java 中如何使用線程 2、什么是爭用條件 3、線程如何交互
微信掃碼,參與3人拼團(tuán)