新聞中心
java 怎么強(qiáng)制關(guān)閉 一個(gè)線程 ?
在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume()。通過(guò)這些方法,我們可以對(duì)線程進(jìn)行方便的操作,但是這些方法中,只有start()方法得到了保留。\x0d\x0a在Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》中詳細(xì)講解了舍棄這些方法的原因。\x0d\x0a如果真的需要終止一個(gè)線程,可以使用以下幾種方法: \x0d\x0a1、讓線程的run()方法執(zhí)行完,線程自然結(jié)束。(這種方法最好)\x0d\x0a\x0d\x0a2、通過(guò)輪詢和共享標(biāo)志位的方法來(lái)結(jié)束線程,例如while(flag){},flag的初始值設(shè)為真,當(dāng)需要結(jié)束時(shí),將flag的值設(shè)為false。(這種方法也不很好,因?yàn)槿绻鹷hile(flag){}方法阻塞了,則flag會(huì)失效)\x0d\x0a如果線程因?yàn)閳?zhí)行sleep()或是wait()而進(jìn)入Not Runnable狀態(tài),假如是wait() 用標(biāo)志位就方法就不行了,\x0d\x0apublic final void wait(long timeout)\x0d\x0a throws InterruptedException此方法導(dǎo)致當(dāng)前線程(稱之為 T)將其自身放置在對(duì)象的等待集中,然后放棄此對(duì)象上的所有同步要求。即當(dāng)前線程變?yōu)榈却隣顟B(tài)\x0d\x0await() 的標(biāo)準(zhǔn)使用方法\x0d\x0asynchronized(obj){\x0d\x0awhile(){\x0d\x0aobj.wait();\x0d\x0a}\x0d\x0a滿足條件的處理過(guò)程\x0d\x0a}\x0d\x0a而您想要停止它,您可以使用第三種即\x0d\x0a3 使用interrupt(),而程式會(huì)丟出InterruptedException例外,因而使得執(zhí)行緒離開(kāi)run()方法
創(chuàng)新互聯(lián)長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為沂水企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),沂水網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
如何在JAVA中讓一個(gè)線程死亡或結(jié)束?
當(dāng)線程執(zhí)行完畢或被其它線程殺死,線程就進(jìn)入死亡狀態(tài),這時(shí)線程不可能再進(jìn)入就緒狀態(tài)等待執(zhí)行。
線程進(jìn)入死亡狀態(tài)的方法有兩種:
1、自然終止:正常運(yùn)行run()方法后終止;
2、異常終止:調(diào)用stop()方法讓一個(gè)線程終止運(yùn)行。
如下代碼:
public class ThreadDemo implements Runnable{
public void run() {
}
}
當(dāng)run方法執(zhí)行結(jié)束,即線程死亡(結(jié)束)。
java如何關(guān)閉線程
關(guān)閉線程有幾種方法,
一種是調(diào)用它里面的stop()方法
另一種就是你自己設(shè)置一個(gè)停止線程的標(biāo)記 (推薦這種)
代碼如下:
package com.demo;
//測(cè)試Thread的stop方法和自己編寫(xiě)一個(gè)停止標(biāo)記來(lái)停止線程;
public class StopThread implements Runnable{
//停止線程的標(biāo)記值boolean;
private boolean flag = true;
public void stopThread(){
flag = false;
}
public void run(){
int i=0;
while(flag){
i++;
System.out.println(Thread.currentThread().getName()+":"+i);
try{
Thread.sleep(1000);
}catch(Exception e){
}
System.out.println(Thread.currentThread().getName()+"=="+i);
}
}
public static void main(String args[]){
StopThread st = new StopThread();
Thread th = new Thread(st);
Thread th1 = new Thread(st);
th.start();
th1.start();
try{
Thread.sleep(5500);
}catch(Exception e){
}
/*
如果使用Thread.stop方法停止線程,不能保證這個(gè)線程是否完整的運(yùn)行完成一次
run方法;但是如果使用停止的標(biāo)記位,那么可以保正在真正停止之前完整的運(yùn)行完
成一次run方法;
*/
th.stop();
st.stopThread();
}
}
java中終止線程的方法?
在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(),stop(),stop(Throwable)andsuspend(),destroy()andresume()。通過(guò)這些方法,我們可以對(duì)線程進(jìn)行方便的操作,但是這些方法中,只有start()方法得到了保留。本文是海文國(guó)際小編搜索整理的關(guān)于JAVA中終止線程的方法,供參考復(fù)習(xí),希望對(duì)大家有所幫助!
如果真的需要終止一個(gè)線程,可以使用以下幾種方法:
1、讓線程的run()方法執(zhí)行完,線程自然結(jié)束。(這種方法最好)
2、通過(guò)輪詢和共享標(biāo)志位的方法來(lái)結(jié)束線程,例如while(flag){},flag的初始值設(shè)為真,當(dāng)需要結(jié)束時(shí),java課程培訓(xùn)機(jī)構(gòu)建議將flag的值設(shè)為false。(這種方法也不很好,因?yàn)槿绻鹷hile(flag){}方法阻塞了,則flag會(huì)失效)
文章名稱:java結(jié)束線程代碼,java結(jié)束線程的三種方法
文章網(wǎng)址:http://www.dlmjj.cn/article/phsjps.html