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

  • Manuel Vizcaino

    Manuel Vizca

    27 Mayıs 2008
  • NicoleGrippo

    NicoleGrippo

    14 Kasım 2006
  • picster

    picster

    20 NİSAN 2006