Java 实现线程的暂停和继续

举报
junehappylove1 发表于 2020/12/29 10:34:09 2020/12/29
【摘要】 前言这几天的项目中,客户给了个需求,希望我可以开启一个任务,想什么时候暂停就什么时候暂停,想什么时候开始就什么时候开始!所以这几天恶补了一下线程中的方法,记录一下,并给大家分享一下正文自定义线程类(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;
            }
        }
    }
}

上面代码中,有注释,其实大家应该都看得懂,那么主要是我们使用同步锁synchronizedObjecy类型的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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。