暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java高并发系列之CyclicBarrier使用案例

码农的修炼之道 2018-12-19
752

        上篇文章《Java高并发同步组件之CyclicBarrier源码解析》介绍了CyclicBarrier的源码,下面我们看看怎么使用,举个简单的例子。


1、场景

      最近和某游戏公司的工程师交流,这种场景很适合讲解这个案例。

     在游戏场景中,假如组团玩闯关游戏,我们假如A,B,C三个玩家,他们有三关要闯。只有三个人都打完怪物,才能一起去下一关。这时候,我们这种CyclicBarrier就要派上用场了。


2、编码模拟

       测试代码比较简单,首先开启一个线程池,然后往线程池里面加入三个线程。每个线程需要做三件事,每件事都需要A,B,C线程同时执行完才能进入下一步。

      这里的三个线程可以代表A,B,C玩家。首先,A,B,C玩家打完第一关,才能通往下一关(或者叫解锁下一关)。三个线程,每执行完一步,就调用await方法进行等待,直道其他线程都完成。

      这里在CyclicBarrier的构造方法中加了一个AtomicInteger来统计关卡,每通过一关,就打印出当前执行完第几次任务。


3、测试结果

     从测试结果可以看出,三个线程,同时完成第一步才能一起往下执行第二步。全部执行完第二步才能执行第三步。

    此外,在执行完任务的时候,调用了构造方法传递进去的Runnable对象的run方法,这个在源码里面也有体现。这里从输出结果可以看出,三个线程执行完第一步以后,控制台输出“第一次任务结束”这样的标志。上面使用了一个AtomicInteger来记录任务的重复次数。

     总的来说,看完该用例可能更能理解CyclicBarrier的使用。

文章转载自码农的修炼之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论