劍指Offer 執行緒 如何中斷執行緒

2021-10-02 10:18:55 字數 541 閱讀 9047

之前我們通常會使用stop來停止執行緒但是這種方法是不安全的,這是因為乙個執行緒會影響另外乙個執行緒,使執行緒本應該滿足的原子性存在無法滿足的可能了。假設執行緒a呼叫stop停止了執行緒b,一般情況下執行緒是不進行通訊的這樣就會讓執行緒b釋放可能還有用的鎖這樣就會導致資料不同步的問題。。

現在使用最多的是interrupt。

它的用處不是中斷執行緒而是通知執行緒應該去中斷但是最後中斷還是不中斷是由執行緒自己去判斷的,這個yield的性質是一樣的。

具體來說一下:

如果執行緒處於被阻塞(sleep、wait、join)狀態,那麼執行緒立刻退出被阻塞狀態,並丟擲乙個interruptedexception異常;

如果執行緒處於正常活動狀態,那麼會將該執行緒的中斷標誌設定為true,被設定的中斷標誌的執行緒將繼續執行不受影響。

因此中斷執行緒需要thread去配合才可以真正的中斷執行緒。

在正常執行任務的時候經常檢查本執行緒的中斷標誌位,如果被設定中度標誌就會自行停止執行緒;

如果執行緒處於正常活動狀態,那麼會將該執行緒的中斷標誌設定為true,被設定中斷標誌的執行緒將會繼續執行,不受到影響。

劍指Offer 執行緒 如何中斷執行緒

以前的時候,我們可以使用stop來停止執行緒,但是這種寫法很不安全,因為可以通過乙個執行緒影響到另乙個執行緒,讓執行緒本應該滿足的原子性,有無法滿足的可能了,而且假如,執行緒a呼叫stop,停止了執行緒b,由於一般情況下,我們的執行緒是不會進行通訊的,這就會讓執行緒b釋放或許還有用的鎖,這就會導致資...

中斷執行緒 interrupt

呼叫interrupt 通知執行緒應該中斷 1 如果執行緒處於阻塞狀態,則執行緒立即退出被阻塞狀態,並丟擲乙個interruptedexception異常 2 如果執行緒處於正常活動狀態,那 package com.mall.controllor.alene import sun.managemen...

執行緒中斷 執行緒讓步 執行緒睡眠 執行緒合併

執行緒中斷 執行緒中斷涉及到三個方法,如下 interrupt 方法用於中斷執行緒,通常的理解來看,只要某個執行緒啟動後,呼叫了該方法,則該執行緒不能繼續執行了,來看個小例子 執行後,我們發現,執行緒t一直在執行,沒有被中斷。其實interrupt 方法並不是中斷執行緒的執行,而是為呼叫該方法的執行...