乙個執行緒在未正常結束之前, 被強制終止是很危險的事情. 因為它可能帶來完全預料不到的嚴重後果. 所以你看到thread.suspend, thread.stop等方法都被deprecated了
那麼不能直接把乙個執行緒搞掛掉, 但有時候又有必要讓乙個執行緒死掉, 或者讓它結束某種等待的狀態 該怎麼辦呢? 優雅的方法就是, 給那個執行緒乙個中斷訊號, 讓它自己決定該怎麼辦. 比如說, 在某個子執行緒中為了等待一些特定條件的到來, 你呼叫了thread.sleep(10000), 預期執行緒睡10秒之後自己醒來, 但是如果這個特定條件提前到來的話, 你怎麼通知乙個在睡覺的執行緒呢? 又比如說, 主線程通過呼叫子執行緒的join方法阻塞自己以等待子執行緒結束, 但是子執行緒執行過程中發現自己沒辦法在短時間內結束, 於是它需要想辦法告訴主線程別等我了. 這些情況下, 就需要中斷.
中斷是通過呼叫thread.interrupt()方法來做的. 這個方法通過修改了被呼叫執行緒的中斷狀態來告知那個執行緒, 說它被中斷了. 對於非阻塞中的執行緒, 只是改變了中斷狀態, 即thread.isinterrupted()將返回true; 對於可取消的阻塞狀態中的執行緒, 比如等待在這些函式上的執行緒, thread.sleep(), object.wait(), thread.join(), 這個執行緒收到中斷訊號後, 會丟擲interruptedexception, 同時會把中斷狀態置回為false.
對於可取消的阻塞狀態中的執行緒來說,主要是為了喚醒執行緒,讓他別阻塞了,中斷狀態設為false
對於正常執行的執行緒,將中斷標誌位設為true,如果有判斷條件,就告訴判斷條件我要中斷了,該幹嘛幹嘛
yield:讓出執行機會給別的執行緒,但是當前執行緒也可能繼續得到機會
執行緒 對執行緒的控制
使用thread建立執行緒後,我們需要對執行緒進行 控制 1.使用start 方法,使執行緒處於running狀態,執行緒開始執行 2.使用join 方法,使執行緒進入waitsleepjoin狀態。3.使用sleep 方法,也會使執行緒進入waitsleepjoin狀態。經歷了sleep 方法定義...
對執行緒的總結
一 建立執行緒 重點1 繼承 thread 2 實現 runnable 知識點 其中用到了設計模式中的 模式,角色 持有真實角色的引用。引申到aop,就是用的動態 3 實現 callable 了解 二 執行緒的狀態 1 新生 start 就緒 執行 阻塞 終止2 終止執行緒 重點 3 阻塞 join...
對執行緒安全的理解
方法中的變數不存在非執行緒安全問題,永遠都是執行緒安全的,這是因為方法內部的變數是私有的特性造成的。synchronized鎖加在方法上,鎖的是物件。效果同synchronized this synchronized加在靜態方法上,鎖的是類。效果同synchronized class.class 多...