Java多線(xiàn)程編程安全退出線(xiàn)程方法介紹
線(xiàn)程停止
Thread提供了一個(gè)stop()方法,但是stop()方法是一個(gè)被廢棄的方法。為什么stop()方法被廢棄而不被使用呢?原因是stop()方法太過(guò)于暴力,會(huì)強(qiáng)行把執(zhí)行一半的線(xiàn)程終止。這樣會(huì)就不會(huì)保證線(xiàn)程的資源正確釋放,通常是沒(méi)有給與線(xiàn)程完成資源釋放工作的機(jī)會(huì),因此會(huì)導(dǎo)致程序工作在不確定的狀態(tài)下
那我們?cè)撌褂檬裁磥?lái)停止線(xiàn)程呢
Thread.interrupt(),我們可以用他來(lái)停止線(xiàn)程,他是安全的,可是使用他的時(shí)候并不會(huì)真的停止了線(xiàn)程,只是會(huì)給線(xiàn)程打上了一個(gè)記號(hào),至于這個(gè)記號(hào)有什么用呢我們可以這樣來(lái)用。
public class Mythread extends Thread{ public void run(){ super.run(); for(int i =0 ;i<50000;i++){ if(this.interrupted()){ System.out.println("停止"); break; } } System.out.println("i="+(i+1)); } } public class Run{ try{ MyThread thread = new MyThread(); thread.start(); thread.sleep(1000); thread.interrupt(); //打上標(biāo)記 }catch(Exception e){ System.out.println("main"); e.printStackTrace(); } System.out.println("end!") }
雖然這樣就會(huì)停止下來(lái) ,可是For后面的語(yǔ)句還是會(huì)執(zhí)行。
異常法 退出線(xiàn)程
public class Mythread extends Thread{ public void run(){ super.run(); try{ for(int i =0 ;i<50000;i++){ if(this.interrupted()){ System.out.println("停止"); throw new Exception(); } } System.out.println("i="+(i+1)); }catch(Exception e){ System.out.println("拋出異常了"); e.printStackTrace(); } } }
解釋 如果當(dāng)我們打上了一個(gè)標(biāo)記我們就可以檢測(cè)到已經(jīng)打上的時(shí)候就返回個(gè)true,進(jìn)入if里面返回了一個(gè)異常 這樣就終止了。這樣做使的線(xiàn)程可以在我們可控的范圍里停止
用什么方法去看什么狀態(tài)呢
this.interrupted():看看當(dāng)前線(xiàn)程是否是中斷狀態(tài),執(zhí)行后講狀態(tài)表示改為false this.isInterrupeted():看看線(xiàn)程對(duì)象是否已經(jīng)是中斷狀態(tài),但是不清除中斷狀態(tài)標(biāo)記。
總結(jié)
以上就是本文關(guān)于Java多線(xiàn)程編程安全退出線(xiàn)程方法介紹的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:淺談Java多線(xiàn)程處理中Future的妙用(附源碼)、Java多線(xiàn)程ForkJoinPool實(shí)例詳解等,有什么問(wèn)題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。下面推薦本站兩本關(guān)于Java編程的書(shū)籍,供參考:
Java經(jīng)典實(shí)例(第三版) 完整版 ([美]達(dá)爾文) 中文pdf掃描版
http://www.dbjr.com.cn/books/577859.html
Java軟件結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)(第4版) (John Lewis) 中文pdf掃描版
http://www.dbjr.com.cn/books/568505.html
希望對(duì)大家有所幫助!
- java多線(xiàn)程之線(xiàn)程安全的單例模式
- Java多線(xiàn)程模擬售票程序和線(xiàn)程安全問(wèn)題
- Java多線(xiàn)程之CAS算法實(shí)現(xiàn)線(xiàn)程安全
- Java多線(xiàn)程環(huán)境下SimpleDateFormat類(lèi)安全轉(zhuǎn)換
- Java多線(xiàn)程及線(xiàn)程安全實(shí)現(xiàn)方法解析
- Java多線(xiàn)程下解決數(shù)據(jù)安全問(wèn)題
- 聊聊java多線(xiàn)程創(chuàng)建方式及線(xiàn)程安全問(wèn)題
- Java多線(xiàn)程之線(xiàn)程安全問(wèn)題詳情
相關(guān)文章
解決Callable的對(duì)象中,用@Autowired注入別的對(duì)象失敗問(wèn)題
這篇文章主要介紹了解決Callable的對(duì)象中,用@Autowired注入別的對(duì)象失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07springboot項(xiàng)目配置logback-spring.xml實(shí)現(xiàn)按日期歸檔日志的方法
本文主要介紹了springboot項(xiàng)目配置logback-spring.xml實(shí)現(xiàn)按日期歸檔日志的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決
這篇文章主要介紹了mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Idea中如何調(diào)出Run dashboard 或services窗口
這篇文章主要介紹了Idea中如何調(diào)出Run dashboard 或services窗口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Java獲取當(dāng)前時(shí)間方法總結(jié)
本篇文章給大家整理了關(guān)于Java獲取當(dāng)前時(shí)間方法,以及相關(guān)代碼分享,有需要的朋友測(cè)試參考下吧。2018-02-02解決cmd運(yùn)行java程序“找不到文件”提示的方案
在本篇文章里小編給大家分享的是關(guān)于解決cmd運(yùn)行java程序“找不到文件”提示的方案,有需要的朋友們可以參考下。2020-02-02