午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java結(jié)束線程的三種方法及該如何選擇

瀏覽:13日期:2022-08-15 10:29:18

java常用的結(jié)束一個(gè)運(yùn)行中的線程的方法有3中:使用退出標(biāo)志,使用interrupt方法,使用stop方法。

1.使用退出標(biāo)志

即在線程內(nèi)部定義一個(gè)bool變量來(lái)判斷是否結(jié)束當(dāng)前的線程:

public class ThreadSafe extends Thread { public volatile boolean exit = false; public void run() { while (!exit){ //do work } } public static void main(String[] args) throws Exception { ThreadFlag thread = new ThreadFlag(); thread.start(); sleep(5000); // 主線程延遲5秒 thread.exit = true; // 終止線程thread thread.join(); System.out.println('線程退出!'); }}

這種情況一般是將線程的任務(wù)放在run方法中的一個(gè)while循環(huán)中,而由這個(gè)bool變量來(lái)對(duì)while循環(huán)進(jìn)行控制。

2.使用interrupt方法

這種方法需要判斷當(dāng)前的線程所處于的狀態(tài):(1)當(dāng)前線程處于阻塞狀態(tài)時(shí)線程處于阻塞狀態(tài)一般是在使用了 sleep,同步鎖的 wait,socket 中的 receiver,accept 等方法時(shí),會(huì)使線程處于阻塞狀態(tài)。

public class ThreadInterrupt extends Thread { public void run() { try { sleep(50000); // 延遲50秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public static void main(String[] args) throws Exception { Thread thread = new ThreadInterrupt(); thread.start(); System.out.println('在50秒之內(nèi)按任意鍵中斷線程!'); System.in.read(); thread.interrupt(); thread.join(); System.out.println('線程已經(jīng)退出!'); } }

注意這種情況寫,使用 interrupt 方法結(jié)束線程的時(shí)候,一定要先捕獲 InterruptedException 異常之后通過(guò) break 來(lái)跳出循環(huán),才能正常結(jié)束 run 方法。

(2)線程未處于阻塞狀態(tài)時(shí)

使用 isInterrupted() 判斷線程的中斷標(biāo)志來(lái)退出循環(huán)。當(dāng)使用 interrupt() 方法時(shí),中斷標(biāo)志就會(huì)置 true,和使用自定義的標(biāo)志來(lái)控制循環(huán)是一樣的道理。

public class ThreadSafe extends Thread { public void run() { while (!isInterrupted()) { //非阻塞過(guò)程中通過(guò)判斷中斷標(biāo)志來(lái)退出 try { Thread.sleep(5*1000); //阻塞過(guò)程捕獲中斷異常來(lái)退出 } catch (InterruptedException e) { e.printStackTrace(); break; //捕獲到異常之后,執(zhí)行 break 跳出循環(huán) } } }}3.使用stop方法來(lái)結(jié)束線程

public class Main { public static void main(String[] args) throws InterruptedException { MyThread myThread = new MyThread(); myThread.start(); Thread.sleep(3000); // 間隔3秒后 myThread.stop(); // 結(jié)束線程 System.out.println('結(jié)束了'); }}4.結(jié)束方法的選擇

建議使用標(biāo)志位和interrupt方法來(lái)結(jié)束線程,stop方法已經(jīng)不建議再被使用了。因?yàn)椴捎?stop 是不安全的,主要影響點(diǎn)如下:

thread.stop() 調(diào)用之后,創(chuàng)建子線程的線程就會(huì)拋出 ThreadDeatherror 的錯(cuò)誤; 調(diào)用 stop 會(huì)釋放子線程所持有的所有鎖。導(dǎo)致了該線程所持有的所有鎖的突然釋放(不可控制),那么被保護(hù)數(shù)據(jù)就有可能呈現(xiàn)不一致性。

以上就是Java結(jié)束線程的三種方法及該如何選擇的詳細(xì)內(nèi)容,更多關(guān)于Java 結(jié)束線程的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品日韩在线 | 四虎在线精品 | 成人av黄色 | 男女做事网站 | 日韩综合一区二区三区 | 牛人盗摄一区二区三区视频 | 精品一区二区在线播放 | 日本美女一区 | 91成人亚洲| 国产婷婷色 | 欧美精品黑人猛交高潮 | www国产视频| 日本不卡在线视频 | 久久久久久久久久av | 国产免费一区二区三区最新6 | 午夜影视大全 | 在线视频一区二区三区 | 午夜视频导航 | 噼里啪啦国语版在线观看 | 四虎在线免费播放 | 国产一区二区三区免费看 | 91免费看网站 | 色一情一乱一乱一区91 | 高清免费毛片 | 久久综合影视 | 黄色一级片在线播放 | 亚洲青草| 欧美国产激情 | 日韩经典一区二区 | 国产区精品视频 | 亚洲大尺度在线观看 | 亚洲毛片在线看 | 免费久久精品视频 | 天天操天天爽天天干 | 欧美一区二区在线播放 | 国产极品一区 | 日本中文字幕一区 | 亚洲毛片在线观看 | 国产精品色视频 | 精品免费在线 | 在线成人免费视频 |