SORU
1 Mayıs 2009, Cuma


Almak engelleme olan bir BlockingQueue kesmek için nasıl()?

BlockingQueue bir nesne götüren bir Dersim var ve sürekli bir döngü içinde take() çağırarak, onları işler. Bir noktada artık nesneleri sıraya eklenecektir biliyorum. Nasıl engelleme durur, böylece take() yöntemi bölüyor muyum?

İşte nesneleri işleyen sınıf:

public class MyObjHandler implements Runnable {

  private final BlockingQueue<MyObj> queue;

  public class MyObjHandler(BlockingQueue queue) {
    this.queue = queue;
  }

  public void run() {
    try {
      while (true) {
        MyObj obj = queue.take();
        // process obj here
        // ...
      }
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
    }
  }
}

Ve burada, bu sınıfın nesneleri işlemek için kullandığı yöntemi:

public void testHandler() {

  BlockingQueue<MyObj> queue = new ArrayBlockingQueue<MyObj>(100);  

  MyObjectHandler  handler = new MyObjectHandler(queue);
  new Thread(handler).start();

  // get objects for handler to process
  for (Iterator<MyObj> i = getMyObjIterator(); i.hasNext(); ) {
    queue.put(i.next());
  }

  // what code should go here to tell the handler
  // to stop waiting for more objects?
}

CEVAP
1 Mayıs 2009, Cuma


Eğer iplik böldüğüm bir seçenek değilse, başka bir "" ya da "komut MyObjHandler olarak kabul edilmesi ve olayın patlak vereceğini" sıraya nesne. işaretçi yerleştirmek için.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DudeFromUkraine

    DudeFromUkra

    7 Ocak 2008
  • michal lelkowski

    michal lelko

    9 Temmuz 2006
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013