2012-04-25 2 views
0

В чем разница между CyclicBarrier и CountDownLatch? У меня тонкая разница, так как оба выглядят одинаково.CyclicBarrier и CountDownLatch?

Пожалуйста, дайте мне знать, если я ошибаюсь, а также объясню то же самое.

+0

Возможный дубликат [Java-параллелизм: обратный отсчет против циклического барьера] (http://stackoverflow.com/questions/4168772/java-concurrency-countdown-latch-vs-cyclic-barrier) – Simon

ответ

1

CountDownLatch используется для одноразовой синхронизации. При использовании CountDownLatch любому потоку разрешено вызывать countDown() столько раз, сколько им нравится. Темы, вызывающие await(), блокируются до тех пор, пока счетчик не достигнет нуля из-за вызовов countDown() другими разблокированными потоками. В javadoc for CountDownLatch состояния:

Await методы блокируют до тех пор, текущее значение счетчика не достигнет нуля из-за вызовы метода CountDown(), после чего все потоки, ожидающие будут освобождены и все последующие вызовы от ждать возвращения немедленно. ...

Другое типичное использование было бы разделить задачу на N частей, описывают каждую часть с Runnable, который выполняет ту часть и рассчитывает на защелку, и очереди все Runnables к Исполнителю. Когда все части завершены, координационная нить сможет пройти через , чтобы пройти через ожидание. (Когда потоки должны многократно отсчитывать в таким образом, вместо того, чтобы использовать CyclicBarrier.)

В противоположность этому, циклический барьер используется для нескольких точек sychronization, например, если в наборе потоков выполняется цикл/поэтапное вычисление и требуется синхронизация перед началом следующей итерации/фазы. В соответствии с javadoc for CyclicBarrier:

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

В отличие от CountDownLatch, каждый вызов await() относится к некоторой фазе и может привести к блокировке потока, пока все стороны, принадлежащие этой фазе, не ожидают(). Нет явной операции countDown(), поддерживаемой CyclicBarrier.

Смежные вопросы