Как я реализую установление приоритетов задачи с помощью ExecutorService в Java 5?

Насколько мне известно, вы можете использовать теги сценария перед тегами заголовка, если вы хотите расставить приоритеты при выполнении сценария, используйте его сразу после начала тегов заголовка.

43
задан Chris R 30 April 2009 в 14:58
поделиться

2 ответа

На первый взгляд кажется, что вы можете определить интерфейс для ваших задач, который расширяет Runnable или Callable и Comparable . Затем оберните ThreadPoolExecutor с PriorityBlockingQueue в качестве очереди и принимайте только задачи, которые реализуют ваш интерфейс.

Учитывая ваш комментарий, похоже, что один из вариантов - это расширение ThreadPoolExecutor и переопределите методы submit () . Обратитесь к AbstractExecutorService , чтобы увидеть, как выглядят стандартные; все, что они делают, это оборачивают Runnable или Callable в FutureTask и execute () . Я' Вероятно, я сделаю это, написав класс-оболочку, который реализует ExecutorService и делегирует анонимный внутренний ThreadPoolExecutor . Оберните их во что-то, что имеет ваш приоритет, чтобы ваш Comparator мог их найти.

8
ответ дан 26 November 2019 в 23:10
поделиться

Будет ли возможно иметь один ThreadPoolExecutor для каждого уровня приоритета? ThreadPoolExecutor может быть создан с помощью ThreadFactory, и у вас может быть собственная реализация ThreadFactory для установки различных уровней приоритета.

 class MaxPriorityThreadFactory implements ThreadFactory {
     public Thread newThread(Runnable r) {
         Thread thread = new Thread(r);
         thread.setPriority(Thread.MAX_PRIORITY);
     }
 }
0
ответ дан 26 November 2019 в 23:10
поделиться