如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)

一曲冷凌霜 提交于 2019-11-29 08:26:15

 以下为线程 阻塞/唤醒  主要代码

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.创建自己的线程
Thread myThread = new MyThread();

// 2.在合适的地方启动线程(你需要在什么地方启动它)
myThread.start();

// 3.启动后线程的 阻塞/暂停
myThread.pauseThread();

// 4.以及 阻塞/暂停 线程后的 唤醒/继续
myThread.resumeThread();

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!