本篇内容介绍了“Java中CyclicBarrier的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
CyclicBarrier和CountDownLatch一样在使用时也需要在构造方法中传递一个int类型的参数,但这个参数代表的含义和在使用上与CountDownLatch有所区别,这个参数代表的是拦截线程的数量,当线程调用CyclicBarrier中的await()方法时,就是告诉CyclicBarrier我已经拦截了当前线程,也就是此时调用await()方法的线程将被阻塞,线程中await()方法后面的代码将不会执行,当前线程会一直等待,一到调用await()方法的线程数量与CyclicBarrier构造方法中参数的数量一致时,线程才会重新执行。下面我们看一下简单的例子来演示一下CyclicBarrier的使用。
下面我们详细分析一下输出的信息。我们在CyclicBarrier构造方法中传递的参数是2也就是说它要拦截2个线程的await()方法后才会执行await()方法后面的逻辑。所以在调用await()方法之前线程是不会阻塞的。所以会出输出开始、计时等信息,我们会发现当线程Thread-1已经执行完循环任务时,并没有马上输出await()方法后面的代码,而是此线程阻塞了,原因是Thread-0还没有实现完,它还没有执行await()方法,也就是说拦截的线程数量还没有达到CyclicBarrier构造方法中传递数量,所以线程Thread-1就会一直阻塞直到Thread-0执行完循环并执行await()方法时,此时拦截的线程数量已经等于构造方法中的参数了,所以线程Thread-1才会恢复执行。这就是CyclicBarrier的使用。
CyclicBarrier与CountDownLatch的区别:
CountDownLatch阻塞的是主线程
CountDownLatch的计数器只能使用一次也就是只能递减
CyclicBarrier阻塞的是子线程
CyclicBarrier的计数器可以使用reset()方法重置
CyclicBarrier还提供了另一个构造方法除了传递int类型的参数外,还可以传递一个Runnable类型。它的目的是,当线程的拦截的数量与构造方法的参数相等时,优先执行构造方法里的任务,然后在执行每个线程中await()方法后面的代码。
“Java中CyclicBarrier的使用方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。