可控制停止的線程

工具類 對Thread的封裝,實(shí)現(xiàn) 可以停止無限循環(huán)的線程

  • 構(gòu)造時傳入Runnable continueRunnable
    continueRunnable為在無限循環(huán)里要執(zhí)行的代碼

  • setSleepTime(long sleepTime) 每隔sleepTime毫秒執(zhí)行一次continueRunnable

  • start() 啟動線程

  • setStop() 停止無限循環(huán),退出線程

此類設(shè)置成一旦關(guān)閉就不可以開啟

使用(偽代碼)

//每隔一秒打印一個1
  final CanStopLoopThread canStopLoopThread=new Thread(
    new Runable(){
        public void run(){
            print(1);
        }
    }
  );
  canStopLoopThread.setSleepTime(1000);
  canStopLoopThread.start();
  //canStopLoopThread.stop();需要停止時調(diào)用


/**
 * Created  on 2017/7/20.
 *
 * @author xyb
 */

public class CanStopLoopThread {
    private static final String TAG="CanStopLoopThread";
    private Thread thread;
    private volatile boolean stop = false;
    private long sleepTime=1000;

    public CanStopLoopThread(final Runnable continueRunnable) {
        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    if (stop) {
                        return;
                    }
                    continueRunnable.run();
                    try {
                        Thread.sleep(sleepTime);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

    public void start() {
        thread.start();
    }

    public void setStop() {
        this.stop = true;
    }

    public void setSleepTime(long sleepTime) {
        this.sleepTime = sleepTime;
    }
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容