国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

JAVA中 終止線程的方法介紹

2019-11-26 16:14:40
字體:
來源:轉載
供稿:網友

在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume()。通過這些方法,我們可以對線程進行方便的操作,但是這些方法中,只有start()方法得到了保留。

在Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》中詳細講解了舍棄這些方法的原因。

如果真的需要終止一個線程,可以使用以下幾種方法:
1、讓線程的run()方法執行完,線程自然結束。(這種方法最好)


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


復制代碼 代碼如下:

public class SomeThread implements Runnable {

private volatile boolean stop = false;

public void terminate() {

stop = ture;

}

public void run() {

while(stop) {

// ... some statements

}

}

}


 

如果線程因為執行sleep()或是wait()而進入Not Runnable狀態,假如是wait() 用標志位就方法就不行了,

public final void wait(long timeout)
                throws InterruptedException此方法導致當前線程(稱之為 T)將其自身放置在對象的等待集中,然后放棄此對象上的所有同步要求。即當前線程變為等待狀態

wait() 的標準使用方法

synchronized(obj){

while(<不滿足條件>){

obj.wait();

}

滿足條件的處理過程

}

而您想要停止它,您可以使用第三種即

3 使用interrupt(),而程式會丟出InterruptedException例外,因而使得執行緒離開run()方法,

例如:

 

復制代碼 代碼如下:

public class SomeThread {

public static void main(String[] args)

{

Thread thread=new Thread(new Runnable(){

 

public void run() {

 while (!Thread.interrupted()) {
                // 處理所要處理的工作
                try {
                   

System.out.println("go to sleep");

Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
               

System.out.println("i am interrupted!");
                }

});

thread.start();

thread.interrupt();

}

}


執行結果為:

go to sleep

i am interrupted!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青河县| 会同县| 皋兰县| 赫章县| 高台县| 余庆县| 舒兰市| 麻阳| 荣成市| 阿图什市| 东平县| 浮梁县| 东丰县| 宁阳县| 新源县| 理塘县| 湘乡市| 正蓝旗| 玛沁县| 营山县| 西乡县| 北宁市| 防城港市| 准格尔旗| 昭通市| 临西县| 霍林郭勒市| 和龙市| 三原县| 汽车| 舒兰市| 琼中| 尚义县| 新河县| 灵川县| 东海县| 交城县| 丰镇市| 德惠市| 德惠市| 二连浩特市|