講師回答 / Arthur
首先從語法上,lockObj換成energyBoxes是可以的,不過易讀性是否降低你要考慮了。第二點,效率要讓位于安全。如果多個資源是無關的,自然可以不同的鎖來互斥(那為什么要放在同一個類里面呢?恐怕要反思設計了),如果資源對線程的訪問有嚴格的互斥約束,那么就不能有多個鎖對象。
2015-01-14
講師回答 / Arthur
問題還是回到interrupte()方法的初衷,這個方法是用來向線程發出中斷請求,而非停止線程的。當然很多時候要停止線程就需要先給他一個中斷請求,然后讓線程處理中斷(比如處理InterruptedException)。在你提到的shutdownNow中,我們看到調用interruptWorkers()也是這個意思,讓所有的worker線程有機會處理中斷。緊接著,tryTerminate()回去做停止的工作。public List<Runnable> shutdownNow() {? ? ? ?...
2015-01-07
已采納回答 / Arthur
你可以理解為,run方法僅僅提供了業務邏輯,而線程運行是有更復雜要求的。這一切都封裝在了Thread內部。所以記住一定不要自己調用run,而是調用start方法。
2015-01-05