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

2021-10-01 05:18:40 字數 580 閱讀 8773

以前的時候,我們可以使用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 方法並不是中斷執行緒的執行,而是為呼叫該方法的執行...