使用interrupt來通知,並不是強制中斷,換句話說也就是不能強制停止執行緒,沒有停止執行緒的權力。
當執行緒被阻塞時,會以拋異常的方式直接響應中斷訊號,不需要再像一種情況那樣進行判斷。
如果在執行過程中,每次迴圈都會呼叫sleep或wait等方法,那麼不需要每次迭代都檢查是否已中斷,因為在阻塞狀態中會幫我們檢查中斷。
在catch中呼叫thread.currentthread().interrupt()來恢復設定中斷狀態,以便在後續執行中,依然能夠檢查到剛剛發生了中斷。
object.wait();
thread.sleep();
thread.join();
blockqueue.take()/put;
lock.lockinterruptibly();
countdownlatch.await();
cyclicbarrier.await();
exchange.exchange();
interruptiblechannel相關方法;
selector相關方法(nio);
volatile當陷入阻塞時,無法停止執行緒。
stop/suspend已經廢棄。
如何正確停止執行緒
原理 new乙個thread物件,如 thread thread new thread runnable介面的實現類 然後呼叫thread.interrupt 方法 使用thread.interrupt 只是發出中段訊號,執行緒停不停止並不由自己決定,而是由被停止的執行緒決定,不是強制停止執行緒。r...
如何停止執行緒?
使用退出標誌,使執行緒正常退出,也就是當run方法完成後執行緒終止。使用stop方法強行終止執行緒 這個方法不推薦使用,因為stop和suspend resume一樣,也可能發生不可預料的結果 使用interrupt方法中斷執行緒。表示讓當前等待的執行緒直接丟擲異常 如下 package com.n...
如何正確的更好的停止乙個執行緒?
前面提到過三種停止執行緒的方式,這三種方式不是被廢棄就是可能造成return汙染,最後雖然建議用拋異常法,但拋異常法依靠的是異常處理機制,下面介紹一種更常用的的停止執行緒的方法 通過在實現runnable介面的類裡面 或者是在繼承thread類的類裡面 定義乙個boolean型別的變數 標記 然後對...