Java实现线程的暂停和恢复的示例详解

 更新时间:2023年11月22日 11:57:37   作者:桃花键神  
这几天的项目中,客户给了个需求,希望我可以开启一个任务,想什么时候暂停就什么时候暂停,想什么时候开始就什么时候开始,所以本文小编给大家介绍了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线程暂停和恢复的资料请关注脚本之家其它相关文章!

相关文章

  • 注解、原生Spring、SchemaBased三种方式实现AOP代码案例

    注解、原生Spring、SchemaBased三种方式实现AOP代码案例

    这篇文章主要介绍了注解、原生Spring、SchemaBased三种方式实现AOP的方法介绍,文中有详细的代码示例,对我们的学习有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • 详解Java之冒泡排序与选择排序

    详解Java之冒泡排序与选择排序

    这篇文章主要为大家介绍了Java之冒泡排序与选择排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 使用Java如何将图片转成Base64编码,并压缩至40k

    使用Java如何将图片转成Base64编码,并压缩至40k

    这篇文章主要介绍了使用Java如何将图片转成Base64编码,并压缩至40k问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java实现TCP和UDP协议详解

    Java实现TCP和UDP协议详解

    这篇文章主要介绍了Java实现TCP和UDP协议详解,TCP(传输控制协议)和UDP(用户数据报协议)是两种最常用的传输层协议,它们都用于在网络上传输数据,但是它们之间有很多不同之处,需要的朋友可以参考下
    2023-07-07
  • java实现输入输出流代码分享

    java实现输入输出流代码分享

    这篇文章主要介绍了java实现输入输出流代码分享的相关资料,需要的朋友可以参考下
    2015-09-09
  • SpringBoot JMX的基本使用方式

    SpringBoot JMX的基本使用方式

    这篇文章主要介绍了SpringBoot JMX的基本使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springBoot mybatis 包扫描实例

    springBoot mybatis 包扫描实例

    这篇文章主要介绍了springBoot mybatis 包扫描实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java中字节流和字符流的理解(超精简!)

    Java中字节流和字符流的理解(超精简!)

    Java通过称为流的抽象来执行I/O操作,下面这篇文章主要给大家介绍了关于Java中字节流和字符流理解,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • JavaWeb 实现验证码功能(demo)

    JavaWeb 实现验证码功能(demo)

    在 WEB-APP 中一般应用于:登录、注册、买某票、秒杀等场景,大家都接触过这个验证码操作,今天小编通过实例代码给大家讲解javaweb实现验证码功能,需要的朋友参考下
    2017-02-02
  • Thread.sleep(0)的写法原理深入解析

    Thread.sleep(0)的写法原理深入解析

    这篇文章主要为大家介绍了Thread.sleep(0)的写法原理深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论