循环使用CyclicBarrier的问题(标题不太好,请进来看看详细问题)
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的介绍,以及相关的并发实例,具有一定参考价值,需要的朋友可以了解下。
【高并发】JUC中的循环栅栏CyclicBarrier的6种使用场景
JUC中的循环栅栏CyclicBarrier的6种使用场景。 CyclicBarrier通常称为循环屏障。它和CountDownLatch很相似,都可以使线程先等待然后再执行。不过CountDownLatch是使一批线程等待另一批线程执行完后再执行;而CyclicBarrier只是使等待的线程达到一定数目后再让它们继续执行。故而CyclicBarrier内部也有一个计数器,计数器的初始值在创建对象时通过构造参数指定,如下所示: 。除此之外,CyclicB
CountDownLatch和CyclicBarrier用法实例大全
《java并发编程》中CountDownLatch和CyclicBarrier用法实例大全,几乎包含了所有重要的用法
Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用
Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用 CountDownLatch、CyclicBarrier、Semaphore这些线程协作工具类是基于AQS的,看完这篇博客后可以去看下面这篇博客,了解它们是如何实现的。 Java并发之AQS详解 CountDownLatch CountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程(这里不涉及)。 我们首先来看看怎么实现一个线程等待多个线程吧。 工厂中,对产品需要进行质检,5个工人进行检查,所有人都认为通过,这个产品才算通过。 代码: packag
详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别
主要介绍了详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


Java SE
