美文网首页
2020-08-03如何实现Java线程的 阻塞/唤醒(和暂停/

2020-08-03如何实现Java线程的 阻塞/唤醒(和暂停/

作者: fjasmin | 来源:发表于2020-08-03 19:14 被阅读0次

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

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

    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.创建自己的线程
    MyThread myThread = new MyThread();
    
    // 2.在合适的地方启动线程(你需要在什么地方启动它)
    myThread.start();
    
    // 3.启动后线程的 阻塞/暂停
    myThread.pauseThread();
    
    // 4.以及 阻塞/暂停 线程后的 唤醒/继续
    myThread.resumeThread();
    
    

    相关文章

      网友评论

          本文标题:2020-08-03如何实现Java线程的 阻塞/唤醒(和暂停/

          本文链接:https://www.haomeiwen.com/subject/nhybrktx.html