Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
import java.util.concurrent.BlockingQueue;
Arayüzü gerçekleştiren sınıflardan bazıları ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue. Şeklen şöyleconstructor
Arayüzü gerçekleştiren sınıflardan birisini kullanabiliriz.
BlockingQueue<Foo> q = new ArrayBlockingQueue<> (200);
add metodu - bloke olmaz, exception fırlatırEğer kuyruk doluysa, bloke olmak yerine exception atar. Exception istemiyorsak boolean sonuç dönen offer() kullanılabilir.
drainTo metoduThrows: IllegalStateException - if this queue is full
Şöyle yaparız.
List<Foo> copy = ...;
// to grab up to 25 elements
q.drainTo (copy, 25);
element metodu - exception fırlatır,Örnek ver
offer metodu - bloke olmaz, boolean döner
İmzası şöyle. Boolean sonuç yerine exception istiyorsak add() kullanılabilir.
public boolean offer (E e)
Şöyle yaparız. Eğer yer yoksa false döner.boolean added = q.offer (e);
if (!added) {
...Do something
}
peek metodu - null dönerÖrnek ver
null yerine exception istiyorsak, remove() kullanılabilir.
Örnek
Şöyle yaparız
Şöyle yaparız
/**
* @param queue Queue containing a list of non-null elements
*/
private static <E> List<E> poll(Queue<E> queue, int n) {
List<E> result = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
// Could be optimized to fail fast on first null
Optional.ofNullable(queue.poll()).ifPresent(result::add);
}
return result;
}
put metoduŞöyle yaparız.
BlockingQueue< Integer > q = ...;
int i = 0;
q.put (i);
remove metodu - bloke olmaz, exception fırlatırException yerine null istiyorsak, poll() kullanılabilir.
take metodu - bloke olur, null dönmez
İmzası şöyle
public E take () throws InterruptedException
ÖrnekŞöyle yaparız. Eğer kuyruk boş ise bloke olur.
Foo request = q.take ();
Örnektake metodu null dönemez. Şu kontrolü yapmak kuyruğa özellikle null konulmadıysa zorunlu değil.
if (request == null) {...}
Örneknull kontrolü yapmadan şöyle yaparız.
private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
private final Thread thread = new Thread(() -> {
try {
while (!Thread.interrupted()) {
queue.take().run();
}
} catch (Exception ex) {
ex.printStackTrace();
}
});
Hiç yorum yok:
Yorum Gönder