CyclicBarrier用法
public static void main(String[] args) {
Executor executors= Executors.newFixedThreadPool(1);
final CyclicBarrier barrier = new CyclicBarrier(2,()->{
executors.execute(()->{
System.out.println("吃苹果");
});
});
ArrayBlockingQueue<String> queue1 = new ArrayBlockingQueue<>(3);
queue1.add("1");
queue1.add("2");
queue1.add("3");
ArrayBlockingQueue<String> queue2 = new ArrayBlockingQueue<>(3);
queue2.add("1");
queue2.add("2");
queue2.add("3");
Thread t1 = new Thread(() -> {
while (queue2.size()>0) {
try {
System.out.println("t1->>"+ queue2.take());
System.out.println("洗苹果");
barrier.await();
Thread.sleep(2000);
} catch (Exception e) {
}
}
});
t1.start();
Thread t2 = new Thread(() -> {
while (queue1.size()>0) {
try {
System.out.println("t2->>"+ queue1.take());
System.out.println("削苹果");
barrier.await();
Thread.sleep(2000);
} catch (Exception e) {
}
}
});
t2.start();
}
CyclicBarrier 比起CountDownLatch 好处是,计算器归位后,可以重新开始,