Когда сбросить 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 полезны в программах, включающих фиксированный размер партии потоков, которые должны иногда ждем друг друга. Барьер называется цикловой потому что его можно повторно использовать после того, как ожидающие потоки выпущенный.

так в нормальном использовании, как только все потоки собраны и барьер он сломал его переустановит и может быть использован снова.

С Javadoc для reset()

сброс барьер в исходное состояние. Если какие-либо стороны в настоящее время ожидая у барьера, они вернутся с BrokenBarrierException. Обратите внимание, что сбрасывается после поломки по другим причинам может быть сложно выполнить; нити нужны к повторно синхронизируйте каким-либо другим способом и выберите один для выполнения сброса. Возможно, было бы предпочтительнее вместо этого создать новый барьер для последующих использовать.

так reset вызывает любые ожидающие потоки, чтобы бросить BrokenBarrierException и сразу же просыпаюсь. reset используется, когда вы хотите "сломать" барьер.

обратите внимание также на предостережение-после того, как потоки были разбужены принудительно, сложно синхронизировать их снова.

TL; DR: ты никогда не нужно использовать reset() в нормальных обстоятельствах.