Meine Frage: Wie eine Reihe von Thread-Objekte auf einem ThreadPoolExecutor
ausführen und warten auf sie alle zu beenden, bevor Sie weitermachen?Wie warten, bis ein ThreadPoolExecutor fertig ist
Ich bin neu in ThreadPoolExecutor. Dieser Code ist also ein Test, um zu lernen, wie es funktioniert. Im Moment fülle ich nicht einmal die BlockingQueue
mit den Objekten, weil ich nicht verstehe, wie man die Warteschlange ohne Aufruf execute()
mit einem anderen RunnableObject
startet. Jedenfalls rufe ich gerade awaitTermination()
an, aber ich denke, dass mir noch etwas fehlt. Irgendwelche Tipps wären toll! Vielen Dank.
public void testThreadPoolExecutor() throws InterruptedException {
int limit = 20;
BlockingQueue q = new ArrayBlockingQueue(limit);
ThreadPoolExecutor ex = new ThreadPoolExecutor(limit, limit, 20, TimeUnit.SECONDS, q);
for (int i = 0; i < limit; i++) {
ex.execute(new RunnableObject(i + 1));
}
ex.awaitTermination(2, TimeUnit.SECONDS);
System.out.println("finished");
}
Die RunnableObject Klasse:
package playground;
public class RunnableObject implements Runnable {
private final int id;
public RunnableObject(int id) {
this.id = id;
}
@Override
public void run() {
System.out.println("ID: " + id + " started");
try {
Thread.sleep(2354);
} catch (InterruptedException ignore) {
}
System.out.println("ID: " + id + " ended");
}
}
Ich glaube nicht, es ist eine gute Idee, um Ihre Frage sofort, nachdem Sie es schreiben und vorschlagen zu beantworten, dass Ihr eigene Antwort ist nicht ganz passend. Im besten Fall garantiert und aktualisiert sie Ihre ursprüngliche Frage, warum diese Antwort nicht ausreicht. – Kiril
@Link, du hast Recht. Ich werde es reparieren. – kentcdodds
Ich habe gerade meine Antwort bearbeitet, um eine Möglichkeit zu zeigen, auf alle Jobs zu warten, bevor ich den Executor herunterfahre. – Gray