以下为线程 阻塞/唤醒 主要代码
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();