如何正確停止執行緒

2021-10-03 11:14:18 字數 686 閱讀 9040

使用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型別的變數 標記 然後對...