正文
如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
以下为线程 阻塞/唤醒 主要代码
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();