Ich schreibe ein Multithread-Programm in Java. Ich habe so etwas geschrieben
%Vor%Das Problem, mit dem ich konfrontiert bin, ist, dass das Array mit der richtigen Ausgabe gedruckt wird, aber dann kommt die abgelehnte Ausführungsausnahme Ich verstehe nicht, warum, wenn die Threads verarbeitet und die richtige Ausgabe gegeben haben, warum der Fehler kommt ...
Ich denke, Sie beenden Ihren Executor zu früh. Dies ist ein Beispiel, wie ich denke, dass Sie arbeiten sollten.
%Vor%Beachten Sie auch, dass die gleichzeitige Arbeit an demselben Array zu Inkonsistenz führen kann - Sie müssen wirklich sicher sein, dass Sie keine Arbeit an dem Array ausführen, das vom Array abhängt.
Problem: Sie senden noch neue Aufgaben, selbst nachdem Sie shutdown()
aufgerufen haben. Die Verwendung von executor.awaitTermination()
wird also nicht helfen.
Um das Problem zu beheben, überprüfen Sie, ob der Executor zum Zeitpunkt der Aufgabe nicht heruntergefahren wurde.
Beispiel:
%Vor%Ich hoffe, es hilft ...
Ich habe die Executoren heruntergefahren, die im Runtime Shutdown-Hook erstellt wurden
%Vor%Eine weitere Option könnte darin bestehen, die Zukunft zu erhalten, wenn Sie sich an den Executor wenden und dann die Zukunft blockieren, indem Sie get
aufrufenTags und Links java