Wenn ich ExecutorService.shutdownNow() im Haupt-Thread ausführt, stoppt es nicht alle Threads, aber wenn ich ExecutorService.shutdownNow() in Thread1 oder Thread2 ausführt, wird es seine untergeordneten Unterthreads Wie kaskadieren Herunterfahren Befehl auf die niedrigste Ebene?Wie alle Threads in der Struktur gestoppt werden?
Main thread
/ \
/ \
Thread 1 Thread 2
| | | | |
A B C D E
Wie alle Threads vom Hauptthread zu töten?
unter Schnipsel mit Thread craete
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(threadExecutor);
List<Future<Object>> futures = new ArrayList<Future<Object>>();
for(MultiThread mt : threadList)
{
futures.add(completionService.submit(mt));
}
while (futures.size() > 0) {
Future f = completionService.take();
futures.remove(f);
try {
Object result = f.get();
System.out.println(result);
} catch (Exception e) {
System.out.println("Caught exception from one task: " + e.getCause().getMessage() + ". shutdown now!");
threadExecutor.shutdownNow();
break;
}
}
Wie Unterbrechung Kind Thread zu handhaben?
Wie viele 'Executor's haben Sie? Haben Sie bei allen die Instanzmethode 'shutdownNow()' aufgerufen? –
Ich habe 2 Executoren ... 1 im Haupt-Thread und die andere in seinem Kind-Thread, die thread1 und thread 2. erstellt. Ich habe shutdownNow() auf beiden Executor aber ich denke, nur thread1 und thread2-Executoren shutdownNow() arbeitet – happy
Aus meiner Erfahrung mit Multithreading müssen Sie jeden Thread durchlaufen und ihn auf null setzen oder ihn beenden, wie Sie es gerade tun. Normalerweise möchte ich meine Threads erstellen, indem ich Runnable implementiere. – Dominic