Ich erstelle einen Threadpool und da ich keine Ausgabe von meinen Threads brauche, verwende ich keine Futures & Callables. Aber das Problem ist, dass, wenn ich keine Futures verwende, ich sehe, dass Threadpool Aufgaben verliert, die ich einreiche.seltsam Java threadpool Verhalten - verlieren Aufgaben, wenn Futures verwendet werden
Hier ist mein Code-Struktur, die Aufgaben- verliert
while(hasWorkToDo){
ThreadPoolExecutor.execute(new Worker());
System.out.println("Work submitted");
}
Innerhalb Worker() Ich drucke „bekam Arbeit“ in der ersten Zeile von run() Umsetzung.
Wenn ich oben Code ausführen, ist die Anzahl der "bekam Arbeit" immer weniger als "Arbeit eingereicht".
Aber, wenn ich meine Code-Struktur ändern
ArrayList<Future<String>> list = new ArrayList<Future<String>>();
while(hasWorkToDo){
Future<String> submit=ThreadPoolExecutor.submit(new Worker());
list.add(submit)
}
for (Future<String> f : list) {
f.get();
}
ich dann sehen, dass die Anzahl der Male, „bekam Arbeit“ unten- gleich
„Arbeit eingereicht“Dies führt mich zu glauben, dass Wenn ich nicht Futures & Callables verwende, verwendet der Threadpool die von mir gesendeten Aufgaben.
Haben Sie schon einmal ein solches Verhalten gesehen? Gibt es eine bessere Möglichkeit, dies zu debuggen?
Ich hatte shutdown() an falscher Stelle – user837208