CyclicBarrier

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");
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章