當前位置:首頁 » 編程語言 » javastop

javastop

發布時間: 2025-01-11 21:00:20

java中如何正確而優雅的終止運行中的線程

Java中終止線程的方式主要有三種:

1、使用stop()方法,已被棄用。原因是:stop()是立即終止,會導致一些數據被到處理一部分就會被終止,而用戶並不知道哪些數據被處理,哪些沒有被處理,產生了不完整的「殘疾」數據,不符合完整性,所以被廢棄。So, forget it!

2、使用volatile標志位

看一個簡單的例子:

首先,實現一個Runnable介面,在其中定義volatile標志位,在run()方法中使用標志位控製程序運行

{

//定義退出標志,true會一直執行,false會退出循環
//使用volatile目的是保證可見性,一處修改了標志,處處都要去主存讀取新的值,而不是使用緩存
publicvolatilebooleanflag=true;

publicvoidrun(){
System.out.println("第"+Thread.currentThread().getName()+"個線程創建");

try{
Thread.sleep(1000L);
}catch(InterruptedExceptione){
e.printStackTrace();
}

//退出標志生效位置
while(flag){
}
System.out.println("第"+Thread.currentThread().getName()+"個線程終止");
}
}

然後,在main()方法中創建線程,在合適的時候,修改標志位,終止運行中的線程。

publicclassTreadTest{
publicstaticvoidmain(String[]arg)throwsInterruptedException{
MyRunnablerunnable=newMyRunnable();

//創建3個線程
for(inti=1;i<=3;i++){
Threadthread=newThread(runnable,i+"");
thread.start();
}
//線程休眠
Thread.sleep(2000L);
System.out.println("——————————————————————————");
//修改退出標志,使線程終止
runnable.flag=false;
}
}

最後,運行結果,如下:

第1個線程創建
第2個線程創建
第3個線程創建
--------------------------
第2個線程終止
第1個線程終止
第3個線程終止

3、使用interrupt()中斷的方式,注意使用interrupt()方法中斷正在運行中的線程只會修改中斷狀態位,可以通過isInterrupted()判斷。如果使用interrupt()方法中斷阻塞中的線程,那麼就會拋出InterruptedException異常,可以通過catch捕獲異常,然後進行處理後終止線程。有些情況,我們不能判斷線程的狀態,所以使用interrupt()方法時一定要慎重考慮。

㈡ java中終止線程的方法

在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(),stop(),stop(Throwable)andsuspend(),destroy()andresume()。通過這些方法,我們可以對線程進行方便的操作,但是這些方法中,只有start()方法得到了保留。本文是海文國際小編搜索整理的關於JAVA中終止線程的方法,供參考復習,希望對大家有所幫助!



如果真的需要終止一個線程,可以使用以下幾種方法:


1、讓線程的run()方法執行完,線程自然結束。(這種方法最好)


2、通過輪詢和共享標志位的方法來結束線程,例如while(flag){},flag的初始值設為真,當需要結束時,java課程培訓機構建議將flag的值設為false。(這種方法也不很好,因為如果while(flag){}方法阻塞了,則flag會失效)


熱點內容
安卓手機漲價怎麼辦 發布:2025-01-11 23:27:17 瀏覽:711
三消游戲伺服器搭建 發布:2025-01-11 23:20:01 瀏覽:246
c語言的函數不可單獨進行編譯 發布:2025-01-11 23:12:33 瀏覽:17
怎麼查信用卡查詢密碼 發布:2025-01-11 23:11:08 瀏覽:572
javaexcel源碼 發布:2025-01-11 23:11:04 瀏覽:557
討論會腳本 發布:2025-01-11 23:09:27 瀏覽:574
test伺服器搭建 發布:2025-01-11 23:03:22 瀏覽:421
微信里的密碼和賬號在哪裡 發布:2025-01-11 22:46:04 瀏覽:752
java字元串個數統計 發布:2025-01-11 22:45:05 瀏覽:543
完美國際2捏臉資料庫 發布:2025-01-11 22:45:04 瀏覽:281