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

 

CyclicBarrier