1. 程式人生 > >java中按順序執行兩個執行緒的方法

java中按順序執行兩個執行緒的方法

比如有執行緒A和B,在A執行完成後B再開始執行

  1. 線上程A run方法最後啟動執行緒B - -
  2. 共享一個volatile boolean型別的標識變數,B一直檢查該變數的值,而A則在執行完成後改變A的值
  3. 使用中斷機制,和上面的方式差不多,B一直檢查Thread.currentThread().isInterrupted() ,而A則在執行完成過後中斷B threadB.interrupt()
  4. 使用Object.wait()和notify()方法,共享一個物件obj,執行緒B 首先obj.wait(),執行緒A執行完成後obj.notify(),喚醒執行緒B
  5. 使用join()方法,執行緒B一開始呼叫threadA.join(),等待執行緒A執行完成之後此方法才會返回,然後開始執行。
  6. 共享一個CountDownLatch, CountDownLatch c = new CountDownLatch(1) B 開始呼叫 c.await(),A在執行完成後呼叫c.countDown(),當c中計數器為0時,await()方法不再阻塞。
  7. 使用柵欄,這個不太直觀,就是用一個CyclicBarrier(1,new B()),當A執行完成後,呼叫barrier.await()。
  8. 通過執行緒池執行一個Callable或Thread執行一個FutureTask,拿到一個Future,呼叫future的get()方法,此方法會阻塞,直到返回執行緒執行完畢,具體用法見 http://blog.csdn.net/joenqc/article/details/76333935
  9. 使用Executors.newSingleThreadExecutor,順序提交兩個任務

暫時就想到這麼多了,歡迎補充。