終止線程的執行 一、強制終止線程的執行 強制終止用的是stop()方法,因為這種方法會丟失數據,所以一般不採用這種方法。 原理是直接殺死線程,這樣的話線程中沒有保存的數據就會丟失 /* 在java中強制終止一個線程 */ public class ThreaTest09 { public stati ...
終止線程的執行
目錄一、強制終止線程的執行
強制終止用的是stop()方法,因為這種方法會丟失數據,所以一般不採用這種方法。
原理是直接殺死線程,這樣的話線程中沒有保存的數據就會丟失
/*
在java中強制終止一個線程
*/
public class ThreaTest09 {
public static void main(String[] args) {
Thread t=new Thread(new Thread09());
t.setName("t");
t.start();
try {
Thread.sleep(1000*5);
} catch (InterruptedException e) {
e.printStackTrace();
}
//stop()強行終止,容易丟失數據,這種方式是直接殺死線程,線程沒有保存的數據會丟失。不建議使用
t.stop();
}
}
//一秒列印一個數字
class Thread09 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"----> begin"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
輸出:
t----> begin0
t----> begin1
t----> begin2
t----> begin3
t----> begin4
可以看出,我們在主線程當中的休眠5s並沒有執行!
二、合理終止線程的執行
既然上面那種方法會有容易丟失數據的缺點,那麼我們線上程的操作中怎麼去合理終止線程的運行呢?
我們可以定義一個布爾值,用來控制線程的結束
代碼:
public class ThreadTest10 {
public static void main(String[] args) {
Thread10 thread10 = new Thread10();
Thread t=new Thread(thread10);
t.setName("t");
t.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
thread10.run=false;
}
}
class Thread10 implements Runnable{
boolean run=true;
@Override
public void run() {
for (int i = 0; i < 10; i++) {
if (run){
System.out.println(Thread.currentThread().getName()+"----->"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
//終止當前線程
//return就是結束,如果還有未保存的可以在這裡執行保存,然後再結束
//save....
return;
}
}
}
}
輸出:
t----->0
t----->1
t----->2
t----->3
t----->4
可以看出在程式中正常執行,當主線程休眠5s之後就調開始執行,把true改為false停止了程式,線程正常結束!
本文來自博客園,作者:星餘明,轉載請註明原文鏈接:https://www.cnblogs.com/lingstar/p/16534431.html