Java实现线程的暂停和恢复的示例详解
作者:桃花键神
这几天的项目中,客户给了个需求,希望我可以开启一个任务,想什么时候暂停就什么时候暂停,想什么时候开始就什么时候开始,所以本文小编给大家介绍了Java实现线程的暂停和恢复的示例,需要的朋友可以参考下
问题思路
在Java中,线程的暂停和恢复可以通过Thread类的interrupt方法实现。需要注意的是,interrupt方法并不会立即停止线程,而是会设置一个中断标记,你需要在你的线程中适当地响应这个中断。
以下是一个简单的示例:
问题答案
public class MyThread extends Thread {
private volatile boolean isInterrupted = false;
@Override
public void run() {
while (!isInterrupted) {
// 线程正在执行的任务...
}
}
public void interruptThread() {
isInterrupted = true;
}
public void resetInterrupt() {
isInterrupted = false;
}
}
在这个例子中,我们创建了一个继承自Thread的类,并添加了一个isInterrupted标志来跟踪线程是否被中断。在run方法中,我们检查这个标志,如果它被设置为true,那么我们就退出循环,线程就会结束。
你可以通过调用interruptThread方法来中断线程,并通过调用resetInterrupt方法来重置中断状态。需要注意的是,当线程被中断时,它会抛出InterruptedException,你需要在你的代码中处理这个异常。
其他方法
自定义线程类(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();
}
出现的结果,会在前一秒内疯狂自增,之后在听五秒后,又开始继续自增;
最后
以上就是Java实现线程的暂停和恢复的示例详解的详细内容,更多关于Java线程暂停和恢复的资料请关注脚本之家其它相关文章!
