import android.util.Log; import java.util.concurrent.CyclicBarrier; /** * created by wangyu on 2019-05-20 * description : 線程欄 */ public class CyclicBarrierUtil { public void doOnOneThread(){ OneThread oneThread = new OneThread(); oneThread.start(); } class OneThread implements Runnable{ CyclicBarrier nCb; public void start(){ Log.e("Tag", "Start"); // 數量,以及到達閾值之後線程 nCb = new CyclicBarrier(2, OneThread.this); startOne(); startTwo(); } private void startOne(){ //延時3秒後 到達柵欄 new Thread(new Runnable() { @Override public void run() { Log.e("Tag", "StartOne"); try { //延時3秒 Thread.sleep(3000); nCb.await(); }catch (Exception e){ } Log.e("Tag", "EndOne"); } }).start(); } private void startTwo(){ //直接到達柵欄 之後延時4秒 new Thread(new Runnable() { @Override public void run() { Log.e("Tag", "StartTwo"); try { nCb.await(); Log.e("Tag", "TwoSleep"); Thread.sleep(4000); }catch (Exception e){ } Log.e("Tag", "EndTwo"); } }).start(); } @Override public void run() { //作爲參數傳遞 到達柵欄之後執行 Log.e("Tag", "Run"); } } }