2010-05-19 7 views
8

Ich muss JAR-Datei in separaten JVM von einer anderen Java-Anwendung aufrufen, und es sehr CPU-aufwändig, so sollte es mit Hintergrundpriorität laufen, um den Rest der nicht zu beeinflussen System. Gibt es dafür eine plattformübergreifende Methode?Plattformübergreifende Möglichkeit, Java-Prozesspriorität zu ändern

+0

im * "einmal schreiben, überall ausführen" * plattformübergreifend, Nein. Aber ein kleines Stück nicht-portablen Code, der auf jedem Un * x (einschließlich OS X) und jedem Windows-Rechner funktioniert, ist wirklich nicht so schwer. +1 zu Stephen C's Antwort. – SyntaxT3rr0r

Antwort

3

Die einfache Antwort ist, dass es keine portable Möglichkeit gibt, die Priorität eines Prozesses in Java zu ändern. (Threads - ja, Prozesse - Nr.)

Wenn Ihre Java-Anwendung eine neue JVM zum Ausführen der CPU-intensiven Anwendung starten muss, ist die Wahrscheinlichkeit groß, dass sie bereits nicht vollständig portierbar ist. Beispielsweise müssen Sie normalerweise den Pfadnamen des Befehls java (oder gleichwertig), ein -cp-Argument (oder gleichwertig), systemspezifische JVM-Optionen usw. angeben.

Also angenommen, dass der Befehl zum Starten der JVM bereits nicht tragbar ist, sollte es kaum eine Rolle spielen, wenn Sie den Befehl mit einem Wrapper-Skript ersetzen, das OS-spezifische Dinge zu ändern, die Priorität des gestarteten Prozesses. (Für UNIX oder Linux können Sie einfach nice verwenden, um die JVM zu starten.)

1

Ich weiß nicht, wie man die Priorität für einen externen Prozess einstellt. Thread hat jedoch eine setPriority Methode, wenn Sie also die Zielanwendung zu steuern, könnten Sie vielleicht einen Schalter hinzufügen, um die Anwendung zu erzählen ihre eigene Priorität auf ein Minimum zu setzen:

theThread.setPriority(Thread.MIN_PRIORITY);

Wenn es immer noch das System betrifft, ich Ich schlage vor, Sie verschachteln einige kurze sleep ing, um die CPU zu entladen.


Eine weitere Option:

Wenn Sie das Ziel .jar im Classpath der "Einleitung" Anwendung setzen, können Sie einfach die in einem neu erstellten Thread main -Methode der jar-Datei aufrufe , und legen Sie dann die Priorität mit der obigen Methode fest. (Dies sollte auch dann funktionieren, wenn Sie den Quellcode der Ziel-JAR-Datei nicht kontrollieren.)

+1

Ich verstehe, er muss einen anderen Prozess spawnen, und diese Methode ist für einen Thread, so glaube ich nicht, dass es funktionieren kann ... – Persimmonium

+0

oh .. hmm .. guter Punkt. Ich nehme an, das macht nur dann Sinn, wenn es eine Möglichkeit gibt, einen Schalter zu dem laufenden Programm hinzuzufügen. – aioobe

+0

Wenn er die Quelle des anderen Prozesses ausgeführt hat, kann er sich auf MIN_PRIORITY setzen, richtig? –

Verwandte Themen