Java實現(xiàn)線程的暫停和恢復(fù)的示例詳解
問題思路
在Java中,線程的暫停和恢復(fù)可以通過Thread類的interrupt方法實現(xiàn)。需要注意的是,interrupt方法并不會立即停止線程,而是會設(shè)置一個中斷標(biāo)記,你需要在你的線程中適當(dāng)?shù)仨憫?yīng)這個中斷。
以下是一個簡單的示例:
問題答案
public class MyThread extends Thread { private volatile boolean isInterrupted = false; @Override public void run() { while (!isInterrupted) { // 線程正在執(zhí)行的任務(wù)... } } public void interruptThread() { isInterrupted = true; } public void resetInterrupt() { isInterrupted = false; } }
在這個例子中,我們創(chuàng)建了一個繼承自Thread的類,并添加了一個isInterrupted標(biāo)志來跟蹤線程是否被中斷。在run方法中,我們檢查這個標(biāo)志,如果它被設(shè)置為true,那么我們就退出循環(huán),線程就會結(jié)束。
你可以通過調(diào)用interruptThread方法來中斷線程,并通過調(diào)用resetInterrupt方法來重置中斷狀態(tài)。需要注意的是,當(dāng)線程被中斷時,它會拋出InterruptedException,你需要在你的代碼中處理這個異常。
其他方法
自定義線程類(MyThread)
package com.example.wangjun.myapplication; import android.util.Log; public class MyThread extends Thread { private final Object lock = new Object(); private boolean pause = false; /** * 調(diào)用該方法實現(xiàn)線程的暫停 */ void pauseThread(){ pause = true; } /* 調(diào)用該方法實現(xiàn)恢復(fù)線程的運行 */ void resumeThread(){ pause =false; synchronized (lock){ lock.notify(); } } /** * 這個方法只能在run 方法中實現(xiàn),不然會阻塞主線程,導(dǎo)致頁面無響應(yīng) */ void onPause() { synchronized (lock) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } @Override public void run() { super.run(); int index = 0; while(true){ while (pause){ onPause(); } try { System.out.println(index); Thread.sleep(50); ++index; }catch (Exception e){ e.printStackTrace(); break; } } } }
上面代碼中,有注釋,其實大家應(yīng)該都看得懂,那么主要是我們使用同步鎖synchronized對Objecy類型的lock進(jìn)行同步,并在OnPause()方法中進(jìn)行wait()方法,線程等待,又在resumeThread()方法中進(jìn)行了解鎖notify(),所以我們就能進(jìn)行線程的暫停和繼續(xù)的操作了
方法的調(diào)用
MyThread my = new MyThread(); Thread thread = new Thread(my); thread.start(); try { sleep(1000); my.pauseThread(); sleep(5000); my.resumeThread(); } catch (InterruptedException e) { e.printStackTrace(); }
出現(xiàn)的結(jié)果,會在前一秒內(nèi)瘋狂自增,之后在聽五秒后,又開始繼續(xù)自增;
最后
以上就是Java實現(xiàn)線程的暫停和恢復(fù)的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java線程暫停和恢復(fù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
注解、原生Spring、SchemaBased三種方式實現(xiàn)AOP代碼案例
這篇文章主要介紹了注解、原生Spring、SchemaBased三種方式實現(xiàn)AOP的方法介紹,文中有詳細(xì)的代碼示例,對我們的學(xué)習(xí)有一定的幫助,需要的朋友可以參考下2023-06-06使用Java如何將圖片轉(zhuǎn)成Base64編碼,并壓縮至40k
這篇文章主要介紹了使用Java如何將圖片轉(zhuǎn)成Base64編碼,并壓縮至40k問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06