javastop
㈠ 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會失效)