美文网首页
并发编程工具(二)CyclicBarrier 循环屏障

并发编程工具(二)CyclicBarrier 循环屏障

作者: 圆企鹅i | 来源:发表于2021-04-17 21:14 被阅读0次

爱称:线程疯狂堵塞器
简介:简单,好用,好上手,就是能用的业务场景不多
ps:会堵塞我线程池挺多线程的 要是任务确实很重 要执行挺久 还是别用8
害 并发大师发明了那么多避免堵塞的锁 在这你给我全堵上了


image.png
         //充满智慧的加一 给主线程一个机会
        CyclicBarrier cyclicBarrier = new CyclicBarrier(task.size() + 1);
        try {
            taskList.forEach((k, v) -> {
                synchronized (cyclicBarrier) {
                    threadPool.execute(() -> {
                        try {
                            //查询 or 干活
                        } catch (Exception e) {
                            //exception
                        } finally {
                            //防止任务中途出错 主线程一直等待
                            try {
                                //返回剩余次数 防止线程卡死
                                int remainingTimes = cyclicBarrier.await(20L, TimeUnit.SECONDS);
                            } catch (Exception e) {
                                //exception
                            }
                            //ps:遇到过线程不安全情况 计数出问题 //可以不通过finally 使用await(Long)超时停止
                        }

                    });
                }
            });
            //超时时间 防止主线程卡死
            cyclicBarrier.await(20L, TimeUnit.SECONDS);
            //第二次执行任务
            taskList.forEach((k, v) -> {
                synchronized (cyclicBarrier) {
                    threadPool.execute(() -> {
                        try {
                            //查询 or 干活
                        } catch (Exception e) {
                            //exception
                        } finally {
                            //防止任务中途出错 主线程一直等待
                            try {
                                //剩余次数 防止线程卡死
                                int remainingTimes = cyclicBarrier.await(20L, TimeUnit.SECONDS);
                            } catch (Exception e) {
                                //exception
                            }
                            //ps:遇到过线程不安全情况 计数出问题 //可以不通过finally 使用await(Long)超时停止
                        }

                    });
                }
            });
            //第二次解锁 主线程 超时时间 防止主线程卡死
            cyclicBarrier.await(20L, TimeUnit.SECONDS);

相关文章

网友评论

      本文标题:并发编程工具(二)CyclicBarrier 循环屏障

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