如何實現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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM