2016-06-09 7 views
0

Ich versuche mehrere Jobs auf meinem Java-Code auszuführen. Sie verwenden den IProgressMonitor, um den Fortschrittsbalken zu aktualisieren.Mehrere Jobs mit Fortschrittsmonitor ausführen

Job job = new Job("My first job") { 
    @Override 
    protected IStatus run(IProgressMonitor monitor) { 
     monitor.beginTask("start task", 100); 
     //long running Hibernate save operation 
     monitor.done(); 
     return Status.OK_STATUS; 
     } 
    }; 
job.setUser(false); 
job.schedule(); 

Ich fahre dann fort, einen zweiten Job in einer anderen Klasse auf die gleiche Weise auszuführen. Also wird der zweite Job nur warten bis der erste fertig ist. Gibt es eine Möglichkeit, entweder zwei gleichzeitig laufen zu lassen oder die erste zu pausieren, damit die zweite laufen kann? Wenn nicht, gibt es eine Möglichkeit, den Fortschrittsmonitor in einem Thread statt in einem Job auszuführen? Ich habe versucht, meine Klassen runnable und setzen die Jobs in der Laufmethode, aber das hat das gleiche Ergebnis. Danke.

+0

Ich weiß nicht, was ist das Standardverhalten, wenn keine ShedulingRule festgelegt ist. Sie könnten versuchen, eine Sheduling-Regel zu setzen, die niemals in Konflikt steht. Wie: job.setRule (neues IST SchedulingRule() {..}); –

Antwort

0

standardmäßig mehrere Jobs laufen Handling Eclipse-Jobmanager.

Sie müssen tatsächlich eine Jobplanungsregel verwenden, um zu verhindern, dass verschiedene Jobs gleichzeitig ausgeführt werden.

Natürlich, wenn ein Job etwas sehr Prozessorintensive tut, werden andere Jobs möglicherweise nicht viel erledigt, während es läuft.

0

Im kein Experte in Java, aber ich bin mir ziemlich sicher, dass Sie Aufgaben gleichzeitig ausgeführt werden können ExecutorService Java in java.util.concurrent.ExecutorService

Die java.util.concurrent.ExecutorService Schnittstelle stellt einen asynchronen Ausführungsmechanismus gefunden verwendet, die Aufgaben ausführen kann im Hintergrund. Ein ExecutorService ist also einem Thread-Pool sehr ähnlich.

Ich bin nicht der Testamentsvollstrecker für Sie gehen zu implementieren, aber Sie können durch die zur gleichen Zeit mit einem Pool von Threads lesen, auf ExecutorServicehere