Java中終止線程的三種方法
Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 這些終止線程運行的方法已經(jīng)被廢棄,使用它們是極端不安全的!
1.線程正常執(zhí)行完畢,正常結(jié)束
也就是讓run方法執(zhí)行完畢,該線程就會正常結(jié)束。
但有時候線程是永遠(yuǎn)無法結(jié)束的,比如while(true)。
2.監(jiān)視某些條件,結(jié)束線程的不間斷運行
需要while()循環(huán)在某以特定條件下退出,最直接的辦法就是設(shè)一個boolean標(biāo)志,并通過設(shè)置這個標(biāo)志來控制循環(huán)是否退出。
public class ThreadFlag extends Thread {
public volatile boolean exit = false;
public void run() {
while (!exit) {
System.out.println("running!");
}
}
public static void main(String[] args) throws Exception {
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(1147); // 主線程延遲5秒
thread.exit = true; // 終止線程thread
thread.join();
System.out.println("線程退出!");
}
}
3.使用interrupt方法終止線程
如果線程是阻塞的,則不能使用方法2來終止線程。
public class ThreadInterrupt extends Thread {
public void run() {
try {
sleep(50000); // 延遲50秒
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception {
Thread thread = new ThreadInterrupt();
thread.start();
System.out.println("在50秒之內(nèi)按任意鍵中斷線程!");
System.in.read();
thread.interrupt();
thread.join();
System.out.println("線程已經(jīng)退出!");
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Hadoop運行時遇到j(luò)ava.io.FileNotFoundException錯誤的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Hadoop運行時遇到j(luò)ava.io.FileNotFoundException錯誤展開,文中有非常詳細(xì)的解決方法,需要的朋友可以參考下2021-06-06
startActivityForResult和setResult案例詳解
這篇文章主要介紹了startActivityForResult和setResult案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
mybatis foreach 循環(huán) list(map)實例
這篇文章主要介紹了mybatis foreach 循環(huán) list(map)實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

