當前位置:首頁 » 編程語言 » java線程暫停

java線程暫停

發布時間: 2023-08-25 00:14:25

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

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

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

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

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

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

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

Ⅱ Java如何讓正在運行的線程暫停一段時間

  1. 可以使用Thread類的Sleep()方法讓線程暫停一段時間。需要注意的是,這並不會讓線程終止,一旦從休眠中喚醒線程,線程的狀態將會被改變為Runnable,並且根據線程調度,它將得到執行。

  2. 可以使用thread.wait(隱虛)隱敏方法來讓線程暫停灶攜燃一段時間,wait方法裡面填寫的是暫停的時間的長度,一毫秒為單位,

Ⅲ Java中如何正確而優雅的終止運行中的線程

Java中終止線程的方式主要有三種:

1、使用stop()方法,已被棄用。原因是:stop()是立即終止,會導致一些數據被到處理一部分就會被終止,而用戶並不知道哪些數據被處理,哪些沒有被處理,產生了不完整的「殘疾」數據,不符合完整性,所以被廢棄。So, forget it!

2、使用volatile標志位

看一個簡單的例子:

首先,實現一個Runnable介面,在其中定義volatile標志位,在run()方法中使用標志位控製程序運行

{

//定義退出標志,true會一直執行,false會退出循環
//使用volatile目的是保證可見性,一處修改了標志,處處都要去主存讀取新的值,而不是使用緩存
publicvolatilebooleanflag=true;

publicvoidrun(){
System.out.println("第"+Thread.currentThread().getName()+"個線程創建");

try{
Thread.sleep(1000L);
}catch(InterruptedExceptione){
e.printStackTrace();
}

//退出標志生效位置
while(flag){
}
System.out.println("第"+Thread.currentThread().getName()+"個線程終止");
}
}

然後,在main()方法中創建線程,在合適的時候,修改標志位,終止運行中的線程。

publicclassTreadTest{
publicstaticvoidmain(String[]arg)throwsInterruptedException{
MyRunnablerunnable=newMyRunnable();

//創建3個線程
for(inti=1;i<=3;i++){
Threadthread=newThread(runnable,i+"");
thread.start();
}
//線程休眠
Thread.sleep(2000L);
System.out.println("——————————————————————————");
//修改退出標志,使線程終止
runnable.flag=false;
}
}

最後,運行結果,如下:

第1個線程創建
第2個線程創建
第3個線程創建
--------------------------
第2個線程終止
第1個線程終止
第3個線程終止

3、使用interrupt()中斷的方式,注意使用interrupt()方法中斷正在運行中的線程只會修改中斷狀態位,可以通過isInterrupted()判斷。如果使用interrupt()方法中斷阻塞中的線程,那麼就會拋出InterruptedException異常,可以通過catch捕獲異常,然後進行處理後終止線程。有些情況,我們不能判斷線程的狀態,所以使用interrupt()方法時一定要慎重考慮。

Ⅳ java中垃圾回收器讓工作線程停頓下來是怎麼做的

1、jvm中,在執行垃圾收集演算法時,Java應用程序的其他所有除了垃圾收集收集器線程之外的線程都被掛起。此時,系統只能允許GC線程進行運行,其他線程則會全部暫停,等待GC線程執行完畢後才能再次運行。這些工作都是由虛擬機在後台自動發起和自動完成的,是在用戶不可見的情況下把用戶正常工作的線程全部停下來,這對於很多的應用程序,尤其是那些對於實時性要求很高的程序來說是難以接受的。 但不是說GC必須STW(Stop-The-World,全局暫停), 你也可以選擇降低運行速度但是可以並發執行的收集演算法,這取決於你的業務。

Ⅳ java 中如何使線程運行一定時間後停止

java中使線程運行一定時間後停止,可以設置一個變數,當滿足條件則退出線程:

importstaticjava.lang.Thread.currentThread;
importjava.util.concurrent.TimeUnit;
publicclassThreadPauseDemo{
publicstaticvoidmain(Stringargs[])throwsInterruptedException{
Gamegame=newGame();
Threadt1=newThread(game,"T1");
t1.start();
//現在停止Game線程
System.out.println(currentThread().getName()+"isstoppinggamethread");
game.stop();
//查看Game線程停止的狀態
TimeUnit.MILLISECONDS.sleep(200);
System.out.println(currentThread().getName()+"isfinishednow");
}
}

classGameimplementsRunnable{
=false;
publicvoidrun(){
while(!isStopped){
System.out.println("Gamethreadisrunning......");
System.out.println("Gamethreadisnowgoingtopause");
try{
Thread.sleep(200);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("Gamethreadisnowresumed......");
}
System.out.println("Gamethreadisstopped......");
}
publicvoidstop(){
isStopped=true;
}
}

程序輸出如下:

Game thread is running......
main is stopping game thread
Game thread is now going to pause
Game thread is now resumed......
Game thread is stopped......
main is finished now

Ⅵ java線程如何停止

通過調用interrupt方法可以使得處於阻塞狀態的線程拋出一個異常,即interrupt方法可以用來中斷一個正處於阻塞狀態的線程;另外,改方法還會設置線程的中斷狀態(註:isInterrupted()可以用來查詢中斷狀態)。

熱點內容
快速指數演算法 發布:2025-02-04 20:20:40 瀏覽:296
python在類中定義函數調用函數 發布:2025-02-04 20:14:47 瀏覽:593
安卓手機的壁紙是哪個 發布:2025-02-04 20:14:44 瀏覽:197
java發展前景 發布:2025-02-04 20:10:19 瀏覽:76
mac登陸密碼哪裡設置 發布:2025-02-04 19:50:20 瀏覽:525
手游腳本封號 發布:2025-02-04 19:42:12 瀏覽:435
玩單機游戲要哪些配置的電腦 發布:2025-02-04 19:17:41 瀏覽:1003
c語言編程圖書 發布:2025-02-04 19:01:52 瀏覽:898
在哪裡開啟密碼顯示 發布:2025-02-04 18:38:30 瀏覽:791
怎麼查詢qq密碼 發布:2025-02-04 18:20:10 瀏覽:515