您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“怎么實(shí)現(xiàn)java線程終止”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么實(shí)現(xiàn)java線程終止”吧!
不正確的線程終止 - stop stop: 終止線程, 并且清楚監(jiān)視器鎖的信息, 但是可能導(dǎo)致線程安全問題, JDK不建議使用
正確的線程終止 - interrupt 如果目標(biāo)線程在調(diào)用Object class的wait方法, join方法或sleep方法時被阻塞, 那么interrupt會生效, 該線程的中斷狀態(tài)將被清除,拋出InterruptedException 如果目標(biāo)線程是被I/O或者NIO的Channel所阻塞,, 同樣I/O操作會被中斷或者返回特殊異常, 達(dá)到終止線程的目的 如果以上條件都不滿足, 則會設(shè)置此線程的狀態(tài)為中斷狀態(tài)
代碼示例:
public class StopThread extends Thread { private int i = 0, j = 0; @Override public void run() { synchronized (this) { // 增加同步鎖,確保線程安全 ++i; try { // 休眠10秒,模擬耗時操作 Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } ++j; } } /** * 打印i和j */ public void print() { System.out.println("i=" + i + " j=" + j); } }
線程stop/interrupt終止代碼示例:
public class Demo3 { public static void main(String[] args) throws InterruptedException { StopThread thread = new StopThread(); thread.start(); // 休眠1秒,確保i變量自增成功 Thread.sleep(1000); // 暫停線程 thread.stop(); // 錯誤的終止 運(yùn)行結(jié)果: i=1 j=0 // thread.interrupt(); // 正確終止 運(yùn)行結(jié)果: 拋出java.lang.InterruptedException i=1 j=1 while (thread.isAlive()) { // 確保線程已經(jīng)終止 } // 輸出結(jié)果 thread.print(); } }
正確的線程終止 - 標(biāo)志位
代碼邏輯中, 增加一個判斷, 用來控制線程的終止
代碼示例:
public class Demo4 extends Thread { public static volatile boolean flag = true; public static void main(String[] args) throws InterruptedException { new Thread( () -> { try { while (flag) { // 判斷是否運(yùn)行 System.out.println("運(yùn)行中"); Thread.sleep(1000L); } } catch (InterruptedException e) { e.printStackTrace(); } }) .start(); // 3秒之后,將狀態(tài)標(biāo)志改為False,代表不繼續(xù)運(yùn)行 Thread.sleep(3000L); flag = false; System.out.println("程序運(yùn)行結(jié)束"); } }
到此,相信大家對“怎么實(shí)現(xiàn)java線程終止”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。