Java多线程-线程中止
生活随笔
收集整理的這篇文章主要介紹了
Java多线程-线程中止
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不正確的線程中止-Stop
Stop:中止線程,并且清除監控器鎖的信息,但是可能導致
線程安全問題,JDK不建議用。
Destroy: JDK未實現該方法。
理想狀態:要么自增成功i=1, j=1,要么自增失敗i=0, j=0
真正程序執行結果:i=1, j=0
沒有保證同步代碼塊里面數據的一致性,破壞了線程安全
stop方法直接停止線程
正確的線程中止-interrupt
如果目標線程在調用Object class的wait()、wait(long)或wait(long, int)方法、join()、join(long, int)或sleep(long, int)方法時被阻塞,那么Interrupt會生效,該線程的中斷狀態將被清除,拋出InterruptedException異常。
如果目標線程是被I/O或者NIO中的Channel所阻塞,同樣,I/O操作會被中斷或者返回特殊異常值。達到終止線程的目的。
如果以上條件都不滿足,則會設置此線程的中斷狀態。
對Demo中的示例,stop()改成interrupt()后,最終輸出為"i=1 j=1",數據一致。
正確的線程中止-標志位
/** 通過狀態位來判斷 */ public class Demo4 extends Thread {public volatile static boolean flag = true;public static void main(String[] args) throws InterruptedException {new Thread(() -> {try {while (flag) { // 判斷是否運行System.out.println("程序運行中");Thread.sleep(1000L);}} catch (InterruptedException e) {e.printStackTrace();}}).start();// 3秒之后,將狀態標志改為False,代表不繼續運行Thread.sleep(3000L);flag = false;System.out.println("程序運行結束");} }在上方代碼邏輯中,增加一個判斷,用來控制線程執行的中止。
轉載于:https://www.cnblogs.com/loveyous/p/11415833.html
總結
以上是生活随笔為你收集整理的Java多线程-线程中止的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Halcon Example - 圆弧测
- 下一篇: Windows内核原理-同步IO与异步I