解決java Android 中同一個執行緒多次執行問題
阿新 • • 發佈:2019-01-02
在java中同一個執行緒只能被start()一次,當第二次start()就會報異常。但是我們的軟體需求常常需要同一個執行緒多次執行同一個方法。為此可以使用notify(),wait()方法來達到我們想要的效果。先看程式碼
public class ThreadTest extends Thread { private static boolean flag = false; public ThreadTest() { System.out.println("threadID is :"+Thread.currentThread().getId()); start(); } /** * @param args */ public static void main(String[] args) { System.out.println("main threadID is :"+Thread.currentThread().getId()); ThreadTest test = new ThreadTest(); try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (test) { test.notify(); } try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (test) { test.notify(); flag = true; } } public void threadStart() { if (!isAlive()) { start(); } } @Override public void run() { while(true){ try { System.out.println("threadID is :"+Thread.currentThread().getId()); synchronized (this) { wait(); } if (flag) { break; } } catch (InterruptedException e) { e.printStackTrace(); } } } }
我的做法是讓子執行緒迴圈執行前等待主執行緒的通知,當主執行緒發出通知後子執行緒才能繼續迴圈執行,每一次執行都需要等待,當然如果想結束子執行緒直接跳出迴圈就可以。
以上思路程式碼均為自己的理解,如有錯誤之處敬請各位大神予以斧正。