21 Nisan 2021 Çarşamba

SynchronousQueue Sınıfı

Giriş
Açıklaması şöyle
SynchronousQueue is an interesting BlockingQueue that's not really a queue. It's not even a data structure per se.
Bu sınıf bir veri yapısı olmadığı için aslında sadece ExecutorService ile işe yarar. 
Örnek
Elimizde şöyle bir kod olsun
BlockingQueue<Runnable> queue = new SynchronousQueue<>();
ExecutorService executorService = new ThreadPoolExecutor(2, 2,
        0L, TimeUnit.MILLISECONDS,
        queue);
Açıklaması şöyle. Burada core thread sayısı ve max thread sayısı hep 2 verildiği için yeni thread yaratılamıyor
We created a thread pool with two threads and a SynchronousQueue in front of it. Because SynchronousQueue is essentially a queue with 0 capacity, such ExecutorService will only accept new tasks if there is an idle thread available. If all threads are busy, new task will be rejected immediately and will never wait. This behavior might be desirable when processing in background must start immediately or be discarded.
Örnek
Elimizde şöyle bir kod olsun. Burada core thread sayısı 0, max thread sayısı ise Integer.MAX. eğer boşta (idle) thread yoksa, kuyruk hemen doluyum cevabı vereceği için yeni bir thread yaratılır.
public static ExecutorService newCachedThreadPool() {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue<Runnable>());
}

Hiç yorum yok:

Yorum Gönder