循环使用CyclicBarrier的问题(标题不太好,请进来看看详细问题)

villagehead villagehead 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我需要写一个任务,
1、这里任务每次执行分2个线程去干活。
2、(当这2个线程都结束了以后)等待10秒,
再进行这个任务。
也就是12121212这样循环着执行下去。

“同时结束后再做什么什么任务”这个需求,
可以使用CyclicBarrier来实现。

但是,我怎么实现“一直循环”这个需求啊?

下面贴出来的是我的代码。
只完成了CyclicBarrier提供的“都结束了才是真结束”的功能。

求教怎么让这个任务一直循环执行下去呢?

代码奉上:

package test.thread.newfunction;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CyclicBarrierTest3 {

public CyclicBarrierTest3(){

CyclicBarrier barrier = new CyclicBarrier(2, new Runnable() {

@Override
public void run() {
System.out.println("所有线程都执行完了!");
}
});

ExecutorService exec = Executors.newFixedThreadPool(2);

Task t1 = new Task(barrier, 1, 3000);
Task t2 = new Task(barrier, 2, 1000);

exec.submit(t1);
exec.submit(t2);

exec.shutdown();
}


static String now() {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
return sdf.format(new Date()) + ": ";
}

static class Task implements Runnable {

private int threadNo = -1;
private int time = 0;

private CyclicBarrier barrier;

public Task(CyclicBarrier barrier, int threadNo, int time) {
this.barrier = barrier;
this.threadNo = threadNo;
this.time = time;
}

public void run() {

try {
System.out.println(now() + "第" + threadNo + "号线程在执行");
Thread.sleep(time);
System.out.println(now() + "第" + threadNo + "号线程执行完毕!!! 花费" + (time/1000) + "秒");
barrier.await();


} catch (InterruptedException e) {
} catch (BrokenBarrierException e) {
}
}
}

public static void main(String[] args) {
new CyclicBarrierTest3();
}
}
...全文

相关推荐

Java并发实例之CyclicBarrier的使用

主要介绍了Java并发实例之CyclicBarrier的使用,涉及CyclicBarrier的介绍,以及相关的并发实例,具有一定参考价值,需要的朋友可以了解下。

weixin_38744778

【高并发】JUC中的循环栅栏CyclicBarrier的6种使用场景

JUC中的循环栅栏CyclicBarrier的6种使用场景。 CyclicBarrier通常称为循环屏障。它和CountDownLatch很相似,都可以使线程先等待然后再执行。不过CountDownLatch是使一批线程等待另一批线程执行完后再执行;而CyclicBarrier只是使等待的线程达到一定数目后再让它们继续执行。故而CyclicBarrier内部也有一个计数器,计数器的初始值在创建对象时通过构造参数指定,如下所示: 。除此之外,CyclicB

九师兄

CountDownLatch和CyclicBarrier用法实例大全

《java并发编程》中CountDownLatch和CyclicBarrier用法实例大全,几乎包含了所有重要的用法

ploter

Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用 CountDownLatch、CyclicBarrier、Semaphore这些线程协作工具类是基于AQS的,看完这篇博客后可以去看下面这篇博客,了解它们是如何实现的。 Java并发之AQS详解 CountDownLatch CountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程(这里不涉及)。 我们首先来看看怎么实现一个线程等待多个线程吧。 工厂中,对产品需要进行质检,5个工人进行检查,所有人都认为通过,这个产品才算通过。 代码: packag

weixin_38623000

详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

主要介绍了详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38548434
评论 11
收藏 已收藏
分享
返回顶部
villagehead
Java SE 62,620 成员 307,251 内容