導航:首頁 > 編程語言 > javathreadstop

javathreadstop

發布時間:2025-05-22 13:09:08

java如何關閉線程

關閉線程有幾種方法,
一種是調用它裡面的stop()方法
另一種就是你自己設置一個停止線程的標記 (推薦這種)
代碼如下:
package com.demo;
//測試Thread的stop方法和自己編寫一個停止標記來停止線程;
public class StopThread implements Runnable{
//停止線程的標記值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方法停止線程,不能保證這個線程是否完整的運行完成一次
run方法;但是如果使用停止的標記位,那麼可以保正在真正停止之前完整的運行完
成一次run方法;
*/
th.stop();
st.stopThread();
}
}

Ⅱ 如何關閉java線程

終止線程的三種方法
1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。
2. 使用stop方法強行終止線程(這個方法不推薦使用,因為stop和suspend、resume一樣,也可能發生不可預料的結果)。
3. 使用interrupt方法中斷線程。

1. 使用退出標志終止線程
當run方法執行完後,線程就會退出。但有時run方法是永遠不會結束的。如在服務端程序中使用線程進行監聽客戶端請求,或是其他的需要循環處理的任務。在這種情況下,一般是將這些任務放在一個循環中,如while循環。如果想讓循環永遠運行下去,可以使用while(true){……}來處理。但要想使while循環在某一特定條件下退出,最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。下面給出了一個利用退出標志終止線程的例子。
package chapter2;
public class ThreadFlag extends Thread
{
public volatile boolean exit = false;
public void run()
{
while (!exit);
}
public static void main(String[] args) throws Exception
{
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(5000); // 主線程延遲5秒
thread.exit = true; // 終止線程thread
thread.join();
System.out.println("線程退出!");
}
}
在上面代碼中定義了一個退出標志exit,當exit為true時,while循環退出,exit的默認值為false.在定義exit時,使用了一個Java關鍵字volatile,這個關鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值,

2. 使用stop方法終止線程
使用stop方法可以強行終止正在運行或掛起的線程。我們可以使用如下的代碼來終止線程:
thread.stop();
雖然使用上面的代碼可以終止線程,但使用stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,因此,並不推薦使用stop方法來終止線程。

3. 使用interrupt方法終止線程
使用interrupt方法來終端線程可分為兩種情況:
(1)線程處於阻塞狀態,如使用了sleep方法。
(2)使用while(!isInterrupted()){……}來判斷線程是否被中斷。
在第一種情況下使用interrupt方法,sleep方法將拋出一個InterruptedException例外,而在第二種情況下線程將直接退出。下面的代碼演示了在第一種情況下使用interrupt方法。
package chapter2;
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秒之內按任意鍵中斷線程!");
System.in.read();
thread.interrupt();
thread.join();
System.out.println("線程已經退出!");
}
}
上面代碼的運行結果如下:
在50秒之內按任意鍵中斷線程!
sleep interrupted
線程已經退出!
在調用interrupt方法後, sleep方法拋出異常,然後輸出錯誤信息:sleep interrupted.
注意:在Thread類中有兩個方法可以判斷線程是否通過interrupt方法被終止。一個是靜態的方法interrupted(),一個是非靜態的方法isInterrupted(),這兩個方法的區別是interrupted用來判斷當前線是否被中斷,而isInterrupted可以用來判斷其他線程是否被中斷。因此,while (!isInterrupted())也可以換成while (!Thread.interrupted())。

Ⅲ 求教高手:java中如何暫停一個線程中的任務,在以後的可以恢復之前任務的執行。

可以用以下幾種方法:
interrupt():中斷線程

stop():強迫線程停止執行。用 Thread.stop 來終止線程將釋放它已經鎖定的所有監視器(作為沿堆棧向上傳播的未檢查 ThreadDeath 異常的一個自然後果)。如果以前受這些監視器保護的任何對象都處於一種不一致的狀態,則損壞的對象將對其他線程可見,這有可能導致任意的行為。

yield()只是使當前線程重新回到可執行狀態,所以執行yield()的線程有可能在進入到可執行狀態後馬上又被執行。yield()只能使同優先順序的線程有執行的機會。----這句是重點

3.書上說yelid()是禮讓,是讓當前執行線程停下來給別的線程資源, 又說沒有任何機制保證會這樣。----------沒有任何機制保證執行yield()的線程一定會把資源讓給其它線程。打個比方:兩個人搶東西,A搶到了B沒有,再把東西放回去重搶,說不定還是A搶到B沒有。沒有任何機制保證放回去後B一定能搶到

sleep方法使線程睡眠,但是到一定毫秒數時會自動到cpu中等待
wait方法使線程等待,但是不會自動到cpu中等待,要通過notify或者notifyall方法進行喚醒。

以上是讓線程等待的方法,你可以選擇適合你程序的方法。

閱讀全文

與javathreadstop相關的資料

熱點內容
linux查看tomcat命令 瀏覽:207
國外便宜雲伺服器 瀏覽:853
程序員歲數大了 瀏覽:792
廣州程序員女朋友學醫 瀏覽:875
linux怎麼復制命令行 瀏覽:343
一氧化碳單片機報警 瀏覽:951
自己有一個伺服器能幹什麼呢 瀏覽:657
怎麼重啟伺服器顯示屏 瀏覽:472
android圖片疊放 瀏覽:257
編譯原理紫龍書詳情 瀏覽:424
2007天道源碼 瀏覽:408
陽光餐飲app怎麼入駐 瀏覽:542
如何給抖音關注加密 瀏覽:48
android獲取設備ram 瀏覽:578
原神如何看自己的賬號的伺服器 瀏覽:415
伺服器雙網卡互通有什麼用 瀏覽:218
淋巴瘤app怎麼看 瀏覽:15
步步高pdf 瀏覽:218
農商行程序員 瀏覽:326
app電腦怎麼傳另外一個手機 瀏覽:148