47 Stimmen

Wie implementiere ich die Aufgabenpriorisierung mit einem ExecutorService in Java 5?

Ich implementiere einen Thread-Pooling-Mechanismus, in dem ich Aufgaben mit unterschiedlichen Prioritäten ausführen möchte. Ich möchte einen netten Mechanismus haben, mit dem ich eine Aufgabe mit hoher Priorität an den Dienst übermitteln kann, damit sie vor anderen Aufgaben geplant wird. Die Priorität der Aufgabe ist eine intrinsische Eigenschaft der Aufgabe selbst (ob ich diese Aufgabe als Callable oder eine Runnable ist für mich nicht wichtig).

Oberflächlich betrachtet sieht es so aus, als könnte ich eine PriorityBlockingQueue als die Aufgabenwarteschlange in meiner ThreadPoolExecutor , aber diese Warteschlange enthält Runnable Objekte, bei denen es sich auch um die Runnable Aufgaben, die ich ihr vorgelegt habe. Außerdem, wenn ich Folgendes eingereicht habe Callable Aufgaben, ist es nicht klar, wie dies jemals abgebildet werden könnte.

Gibt es eine Möglichkeit, dies zu tun? Ich würde wirklich lieber nicht meine eigene Rolle für diese, da ich viel wahrscheinlicher ist, es falsch, dass Weg zu bekommen.

(Nebenbei bemerkt: Ja, ich bin mir der Möglichkeit bewusst, dass Arbeitsplätze mit niedrigerer Priorität in einem solchen Fall verhungern könnten. Extrapunkte (?!) für Lösungen, die eine vernünftige Garantie für Fairness bieten)

0voto

willcodejavaforfood Punkte 41426

Wäre es möglich, eine ThreadPoolExecutor für jede Stufe der Priorität? A ThreadPoolExecutor kann mit einer ThreadFactory instanziiert werden, und Sie könnten Ihre eigene Implementierung einer ThreadFactory um die verschiedenen Prioritätsstufen einzustellen.

 class MaxPriorityThreadFactory implements ThreadFactory {
     public Thread newThread(Runnable r) {
         Thread thread = new Thread(r);
         thread.setPriority(Thread.MAX_PRIORITY);
     }
 }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X