SORU
4 Ocak 2010, PAZARTESİ


'In ThreadPoolExecutor gönderme yapmak nasıl() eğer doymuş ise yöntem blok?

Yeni görevler eklemek için çalışırken ThreadPoolExecutor En büyük boyutuna ulaştı ve sıra dolu, sumbit() yöntemi bloklar gibi oluşturmak istiyorum. Bir özel uygulamaya gerek bunun için RejectedExecutionHandler veya yapmak için varolan bir yolu bu standart java kütüphanesini kullanan var mı?

CEVAP
4 Ocak 2010, PAZARTESİ


Olası bir çözüm sadece buldum:

public class BoundedExecutor {
    private final Executor exec;
    private final Semaphore semaphore;

    public BoundedExecutor(Executor exec, int bound) {
        this.exec = exec;
        this.semaphore = new Semaphore(bound);
    }

    public void submitTask(final Runnable command)
            throws InterruptedException, RejectedExecutionException {
        semaphore.acquire();
        try {
            exec.execute(new Runnable() {
                public void run() {
                    try {
                        command.run();
                    } finally {
                        semaphore.release();
                    }
                }
            });
        } catch (RejectedExecutionException e) {
            semaphore.release();
            throw e;
        }
    }
}

Başka çözümler var mı? Bu gibi durumlarda işlemek için standart bir yol gibi görünüyor beri RejectedExecutionHandler dayalı bir şey tercih ederim.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dopelives

    Dopelives

    30 Temmuz 2009
  • Pocketnow

    Pocketnow

    14 EKİM 2007
  • thenewboston

    thenewboston

    4 ŞUBAT 2008