Android Java 執行緒暫停與繼續
阿新 • • 發佈:2019-02-08
突然碰到一個問題,執行緒的暫停與繼續,我想了想,去使用JDK給我們提供的suspend方法、interrupt方法??suspend()方法讓這個執行緒與主執行緒都暫停了,誰來喚醒他們??明顯這個不好用,要用的話,恐怕得另寫喚醒執行緒了!interrupt方法,這個方法實際上只能中斷當前執行緒!汗!
既然JDK解決不了偶的問題,偶只能自己寫了!
這個時候想到了Object的wait()和notifyAll()方法。使用這兩個方法讓執行緒暫停,並且還能恢復,我只需要封裝一下,就能夠變成非常之好用的程式碼了!如下請看:
我新建Thread類繼承MyThread只需實現runPersonelLogic()即可跑你自己的邏輯啦!!!
另外呼叫setSuspend(true)是當前執行緒暫停/ 等待,呼叫setSuspend(false)讓當前執行緒恢復/喚醒!自我感覺很好使!
- publicabstractclass MyThread extends Thread {
- privateboolean suspend = false;
- private String control = ""; // 只是需要一個物件而已,這個物件沒有實際意義
- publicvoid setSuspend(boolean suspend) {
-
if (!suspend) {
- synchronized (control) {
- control.notifyAll();
- }
- }
- this.suspend = suspend;
- }
- publicboolean isSuspend() {
- returnthis.suspend;
- }
- publicvoid run() {
- while (true) {
-
synchronized (control) {
- if (suspend) {
- try {
- control.wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- this.runPersonelLogic();
- }
- }
- protectedabstractvoid runPersonelLogic();
- publicstaticvoid main(String[] args) throws Exception {
- MyThread myThread = new MyThread() {
- protectedvoid runPersonelLogic() {
- System.out.println("myThead is running");
- }
- };
- myThread.start();
- Thread.sleep(3000);
- myThread.setSuspend(true);
- System.out.println("myThread has stopped");
- Thread.sleep(3000);
- myThread.setSuspend(false);
- }
-
}