Насколько мне известно, вы можете использовать теги сценария перед тегами заголовка, если вы хотите расставить приоритеты при выполнении сценария, используйте его сразу после начала тегов заголовка.
На первый взгляд кажется, что вы можете определить интерфейс для ваших задач, который расширяет Runnable
или Callable
и Comparable
. Затем оберните ThreadPoolExecutor
с PriorityBlockingQueue
в качестве очереди и принимайте только задачи, которые реализуют ваш интерфейс.
Учитывая ваш комментарий, похоже, что один из вариантов - это расширение ThreadPoolExecutor
и переопределите методы submit ()
. Обратитесь к AbstractExecutorService
, чтобы увидеть, как выглядят стандартные; все, что они делают, это оборачивают Runnable
или Callable
в FutureTask
и execute ()
. Я' Вероятно, я сделаю это, написав класс-оболочку, который реализует ExecutorService
и делегирует анонимный внутренний ThreadPoolExecutor
. Оберните их во что-то, что имеет ваш приоритет, чтобы ваш Comparator
мог их найти.
Будет ли возможно иметь один ThreadPoolExecutor для каждого уровня приоритета? ThreadPoolExecutor может быть создан с помощью ThreadFactory, и у вас может быть собственная реализация ThreadFactory для установки различных уровней приоритета.
class MaxPriorityThreadFactory implements ThreadFactory {
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setPriority(Thread.MAX_PRIORITY);
}
}