美文网首页
基于CAS的一些锁(3)- CyclicBarrier

基于CAS的一些锁(3)- CyclicBarrier

作者: silence_J | 来源:发表于2020-05-08 11:10 被阅读0次

这个同步工具CyclicBarrier直译为循环栅栏。立一个栅栏挡在前面,后面人满后把栅栏打开放行,再关闭栅栏,如此循环。

CyclicBarrier构造方法第一个参数为:在栅栏前等待的线程数;第二个参数为:Runnable对象,是栅栏被打开时所做的操作,这个参数也可不传默认不做任何操作。

public class T03_CyclicBarrier {

    public static void main(String[] args) {

        /*CyclicBarrier barrier = new CyclicBarrier(20, new Runnable() {
            @Override
            public void run() {
                System.out.println("满人,栅栏打开");
            }
        });*/

        CyclicBarrier barrier = new CyclicBarrier(20, () -> {
            System.out.println("满人,栅栏打开");
        });

        for (int i = 0; i < 100; i++) {
            new Thread(() -> {
                try {
                    barrier.await(); // 阻塞,直到栅栏打开
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

CyclicBarrier的使用场景
比如需要进行一个复杂的操作 1访问数据库,2访问网络,3访问硬盘文件。
这可以采用顺序执行方式,按顺序依次执行,效率很低。
还有种就是并发执行,让不同的线程执行不同的操作,并且这三个线程都到位了才能去执行,这时就可以用CyclicBarrier。

相关文章

网友评论

      本文标题:基于CAS的一些锁(3)- CyclicBarrier

      本文链接:https://www.haomeiwen.com/subject/nkuxnhtx.html