講師回答 / Arthur
你得結果也是正常的。簡單說只有Running的線程擁有CPU,CPU時間片用完就釋放。這就是為什么還沒調用sleep(),另一個線程就執行了。要把整個問題說清楚需要了解Java線程的狀態及遷移的知識。你可以參考慕課上的《細說Java多線程》
2015-02-21
講師回答 / Arthur
用了volatile,你在這里寫入keepRunning的值,run里面的while才能結束。不用volatile,run里面的while很有可能停不下來。具體你可以去Wiki看看。
2015-02-21
講師回答 / Arthur
run()其實是Runnable的成員函數,自己并不是Thread。你如果習慣用this,說明你總是在繼承Thread類。如果你通過Runnable的方式初始化一個線程,你自然就不會用this鳥。
2015-01-15
講師回答 / Arthur
首先從語法上,lockObj換成energyBoxes是可以的,不過易讀性是否降低你要考慮了。第二點,效率要讓位于安全。如果多個資源是無關的,自然可以不同的鎖來互斥(那為什么要放在同一個類里面呢?恐怕要反思設計了),如果資源對線程的訪問有嚴格的互斥約束,那么就不能有多個鎖對象。
2015-01-14
講師回答 / Arthur
問題還是回到interrupte()方法的初衷,這個方法是用來向線程發出中斷請求,而非停止線程的。當然很多時候要停止線程就需要先給他一個中斷請求,然后讓線程處理中斷(比如處理InterruptedException)。在你提到的shutdownNow中,我們看到調用interruptWorkers()也是這個意思,讓所有的worker線程有機會處理中斷。緊接著,tryTerminate()回去做停止的工作。public List<Runnable> shutdownNow() {? ? ? ?...
2015-01-07