以下為線程 阻塞/喚醒 主要代碼
public class MyThread extends Thread { //無意義 private final Object lock = new Object(); //標志線程阻塞情況 private boolean pause = false; /** * 設置線程是否阻塞 */ public void pauseThread() { this.pause = true; } /** * 調用該方法實現恢復線程的運行 */ public void resumeThread() { this.pause = false; synchronized (lock) { //喚醒線程 lock.notify(); } } /** * 這個方法只能在run 方法中實現,不然會阻塞主線程,導致頁面無響應 */ void onPause() { synchronized (lock) { try { //線程 等待/阻塞 lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } @Override public void run() { super.run(); //標志線程開啟 isWait = true; //一直循環 while (true) { if (pause) { //線程 阻塞/等待 onPause(); } try { //程序每50毫秒執行一次 值可更改 Thread.sleep(50); //這里寫你的代碼 你的代碼 你的代碼 重要的事情說三遍 } catch (Exception e) { e.printStackTrace(); break; } } } }
如何使用?
// 1.創建自己的線程 MyThread myThread = new MyThread(); // 2.在合適的地方啟動線程(你需要在什么地方啟動它) myThread.start(); // 3.啟動后線程的 阻塞/暫停 myThread.pauseThread(); // 4.以及 阻塞/暫停 線程后的 喚醒/繼續 myThread.resumeThread();
