9 Nisan 2018 Pazartesi

CyclicBarrier Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.CyclicBarrier;
Bu sınıf tüm thread'lerin aynı noktada buluşmasını sağlar. Detaylı bir kullanım örneği için buraya bakınız.
Java diğer thred'leri beklemek için 3 tane sınıf sunuyor Bunlar CyclicBarrier, CountDownLatch, ve Phaser.
CountdownLatch İle Farkı
Bu sınıf ve CountdownLatch çok benziyorlar. Aralarında bazı farklar var. CyclicBarrier daha karmaşık işler için kullanılır. Açıklaması şöyle.
Use CyclicBarrier when you do the work and need to wait in the same threads. When you need to wait for tasks done in other threads, use CountDownLatch instead. To use CyclicBarrier or CountDownLatch, you need to know the number of threads when you call the constructor. If you need to add threads after construction time, use the class Phaser.
1. CyclicBarrier sayma işlemi bitince çalıştırmak üzere bir Runnable alabilir.
2. Barrier reset'lenip tekrar kullanılabilir.
3. CyclicBarrier nesnesinin await() metodu farklı thread'ler tarafından çağrılmalıdır. CountdownLatch için countDown() metodu aynı thread tarafından arka arkaya çağrılsa bile sorun olmaz.

Phaser İle Farkı
Açıklaması şöyle.
If you need to add threads after construction time, use the class Phaser.
constructor
Şöyle yaparız.
CyclicBarrier barrier = new CyclicBarrier(3); 
await
Thread içinde çağrılır. Diğer thread'lerin de aynı satıra gelmesini bekler. Nesnenin isminde cyclic olmasından anlaşılacağı gibi son thread de await'i çağırığ sayaç 0 olduktan sonra otomatik olarak tekrar 3 değerini alır.
barrier.await(); //Barrier automatically resets.

Hiç yorum yok:

Yorum Gönder