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

  • kev5124

    kev5124

    9 Kasım 2008
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006
  • Pepsi

    Pepsi

    1 Kasım 2005