講師回答 / 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