用雙線程實現。他殺。
每當乙個執行緒從池中被取出的時候,給該執行緒分配乙個uuid用於標誌此次任務,同時啟動另外乙個殺手執行緒開始計時(即sleep),並且該殺手執行緒持有同樣uuid用於尋找要殺死的目標。
當殺手覺醒後即刻檢查:
1.如果目標執行緒已歸還到池中,說明目標執行緒在規定時間前已結束。則不做任何操作。
2.如果目標執行緒還在池外,但是其uuid與自己所持目標uuid不一致,說明所監視的執行緒正常結束後被再次取出使用。交由另外乙個殺手執行緒處理,本殺手不做任何操作。
3.如果目標執行緒仍在池外並且所持uuid與目標uuid一致(bingo!),則殺死該執行緒,並把屍體歸還池中。
public void run()
// do something
thread.sleep(sleeptime);
} catch (interruptedexception e)
執行緒池中線程和佇列
執行緒池中的佇列分兩種,有界佇列和無界佇列,當使用有界佇列的時候,新加入乙個任務會先判斷核心執行緒是否有空閒的,如果有,就直接使用執行緒執行,如果沒有,會看看有界佇列是否已滿,如果未滿,則將任務加入有界佇列中,等核心執行緒有空閒的時候再去從佇列中獲取執行,如果有界佇列已滿,這個時候就會看看正在執行的...
java中線程問題
24.09 多執行緒 獲取名字和設定名字 掌握 1.獲取名字 通過getname 方法獲取執行緒物件的名字 2.設定名字 通過建構函式可以傳入string型別的名字 new thread start new thread yyy start 通過setname string 方法可以設定執行緒物件的...
java執行緒池和關閉執行緒池中的執行緒
如果執行緒經常喜歡去new的話是不對的,你需要乙個池子管理。newcachedthreadpool 這個乙個帶快取的執行緒池,是個可以無限大的執行緒池,新建的執行緒放倒這個池子裡,當執行緒停掉了的時候,下個個執行緒進來,可以復用這個執行緒。newfixedthreadpool 是個有長度的執行緒池,...