Java線程(Thread)四種停止方式代碼實例
1.正常的程序啟動,停止
2.使用退出標(biāo)記,一般程序在run()方法后,線程會正常結(jié)束。
但是有一些伺服線程還在運(yùn)行,他們運(yùn)行時間較長,只有當(dāng)外部條件滿足時,他們才會停止。實現(xiàn)如下:
public class ThreadCease extends Thread{ private volatile boolean exit = false; public void run(){ while(!exit){ //停止后做的事情~ } }
3.使用線程(Thread)自帶的isInterrupted()方法來結(jié)束線程。實現(xiàn)如下:
public class ThreadCease1 extends Thread{ public void run(){ while(!isInterrupted()){ try{ Thread.sleep(3000); }catch(Exception e){ e.printStackTrace(); break; } } } }
注意:使用interrupted()方法來中斷線程有兩種情況:
3.1.1 線程處于阻塞狀態(tài),如線程中使用了sleep(),同步鎖 wait(),socket的receiver,accept方法時,會使線程進(jìn)入到阻塞狀態(tài),當(dāng)程序調(diào)用interrupted()方法時,會拋出InterrupteException異常。阻塞中的那個方法拋出異常,通過捕獲該異常,然后break跳出循環(huán),從而結(jié)束該線程。注:不是調(diào)用了interrupted()方法就會結(jié)束線程,是捕獲到了interruptedException異常后,break 跳出循環(huán)后才能結(jié)束此線程。
3.1.2 線程未處于阻塞狀態(tài),調(diào)用interrupted()方法時,實際上是通過判斷線程的中斷標(biāo)記來退出循環(huán)。
4.stop()方法停止
Thread.stop()方法來結(jié)束線程的運(yùn)行,但是很危險,一般不建議使用stop()來停止線程;不安全的原因主要有:在程序調(diào)用Thread.stop()后會拋出ThreadDeatherror()錯誤。并釋放子線程所持有的所有鎖,會導(dǎo)致被保護(hù)數(shù)據(jù)呈現(xiàn)不一致性,此過程不可控。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實現(xiàn)application配置信息加密
在配置文件中,我們有開發(fā)環(huán)境配置和生產(chǎn)環(huán)境配置,而生產(chǎn)環(huán)境的配置信息是需要做好防護(hù)的,避免外泄,所以本文為大家整理了application配置信息加密的方法,需要的可以參考下2023-07-07SpringBoot線程池ThreadPoolTaskExecutor異步處理百萬級數(shù)據(jù)
本文主要介紹了SpringBoot線程池ThreadPoolTaskExecutor異步處理百萬級數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03Java+Selenium實現(xiàn)控制瀏覽器的啟動選項Options
這篇文章主要為大家詳細(xì)介紹了如何使用java代碼利用selenium控制瀏覽器的啟動選項Options的代碼操作,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01Spring注解@RestControllerAdvice原理解析
這篇文章主要介紹了Spring注解@RestControllerAdvice原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11