Когда сбросить CyclicBarrier в многопоточности java
Я читал CyclicBarrier
в следующей ссылке
http://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html.
В примере 1, CyclicRaceDemo.java
основной метод, CyclicBarrier повторно используется без вызова сброс метод.
я запустил пример, и он работал нормально. Итак, мне интересно, какая польза reset
метод. Когда его следует назвать? Или нам вообще нужно позвонить?
1 ответов
A CyclicBarrier
является циклическим, потому что его можно повторно использовать без сброса. От Javadoc
помощь синхронизации, которая позволяет набор потоков для всех ждать друг друга, чтобы достичь общей точки барьера. CyclicBarriers полезны в программах, включающих фиксированный размер партии потоков, которые должны иногда ждем друг друга. Барьер называется цикловой потому что его можно повторно использовать после того, как ожидающие потоки выпущенный.
так в нормальном использовании, как только все потоки собраны и барьер он сломал его переустановит и может быть использован снова.
сброс барьер в исходное состояние. Если какие-либо стороны в настоящее время ожидая у барьера, они вернутся с
BrokenBarrierException
. Обратите внимание, что сбрасывается после поломки по другим причинам может быть сложно выполнить; нити нужны к повторно синхронизируйте каким-либо другим способом и выберите один для выполнения сброса. Возможно, было бы предпочтительнее вместо этого создать новый барьер для последующих использовать.
так reset
вызывает любые ожидающие потоки, чтобы бросить BrokenBarrierException
и сразу же просыпаюсь. reset
используется, когда вы хотите "сломать" барьер.
обратите внимание также на предостережение-после того, как потоки были разбужены принудительно, сложно синхронизировать их снова.
TL; DR: ты никогда не нужно использовать reset()
в нормальных обстоятельствах.