Java 实现线程的暂停和继续
【摘要】 前言这几天的项目中,客户给了个需求,希望我可以开启一个任务,想什么时候暂停就什么时候暂停,想什么时候开始就什么时候开始!所以这几天恶补了一下线程中的方法,记录一下,并给大家分享一下正文自定义线程类(MyThread)package com.example.wangjun.myapplication;import android.util.Log;public class MyThread e...
前言
这几天的项目中,客户给了个需求,希望我可以开启一个任务,想什么时候暂停就什么时候暂停,想什么时候开始就什么时候开始!所以这几天恶补了一下线程中的方法,记录一下,并给大家分享一下
正文
自定义线程类(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;
/**
* 调用该方法实现线程的暂停
*/
void pauseThread(){
pause = true;
}
/*
调用该方法实现恢复线程的运行
*/
void resumeThread(){
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();
int index = 0;
while(true){
while (pause){
onPause();
}
try {
System.out.println(index);
Thread.sleep(50);
++index;
}catch (Exception e){
e.printStackTrace();
break;
}
}
}
}
上面代码中,有注释,其实大家应该都看得懂,那么主要是我们使用同步锁synchronized
对Objecy
类型的lock
进行同步,并在OnPause()
方法中进行wait()
方法,线程等待,又在resumeThread()
方法中进行了解锁notify()
,所以我们就能进行线程的暂停和继续的操作了
方法的调用
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();
}
出现的结果,会在前一秒内疯狂自增,之后在停五秒后,又开始继续自增;
最后
目前只是简单的线程暂停和继续,希望大家可以根据这个基础进行相应的调整和深入,谢谢大家!!!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)