题目
今天一个朋友问了我一个题目,A,B,C三个线程,按照顺序,依次循环输出A,B,C字符。思路我大概是知道的,但是从来没实践过,既然是别人提出技术问题,那么我肯定是在所不辞的。
思路
让多线程之间按照顺序输出,那么可以考虑用锁控制对应顺序,B等待A释放锁,C等待B释放锁,我们的选择可以有CountDownLatch和CyclicBarrier,但是有循环的条件,所以应该选择可以重置的CyclicBarrier。 之后的思考就是如何通过CyclicBarrier实现C执行完后再执行A。
我的代码如下
publicstaticvoidmain(String[]args){
finalCyclicBarriercyclicBarrier2=newCyclicBarrier(2);
finalCyclicBarriercyclicBarrier3=newCyclicBarrier(2);
finalCyclicBarriercyclicBarrier4=newCyclicBarrier(3);
ThreadthreadA=newThread(newRunnable(){
@Override
publicvoidrun(){
try{
while(true){
System.out.println("A");
//控制A执行完在执行
cyclicBarrier2.await();
//等待ABC都运行完
cyclicBarrier4.