La mia domanda è leggermente complicata. Lascia che provi a spiegarlo a fondo, ma se hai bisogno di maggiori dettagli, sentiti libero di chiedermelo, li aggiungerò.Come viene ucciso un threadPoolExecutor con i thread "Occupati"?
Ho appreso di recente (tramite esperimento) che se un thread esegue continuamente il lavoro, qualcosa come un'operazione intera in un ciclo while (vero), l'interruzione del thread non ha alcun effetto su di esso. La discussione continua come se nulla fosse accaduto.
Ora, ThreadPoolExecutors viene ucciso utilizzando i metodi shutDown() o shutDownNow(). Ho controllato il codice per questi metodi, usano la chiamata interrupt() per uccidere un thread. Quindi, se tutti i thread sono impegnati a fare cose, come si ucciderà un esecutore? Come viene ucciso, ad esempio quando lo utilizziamo nelle app di primavera.
Una tale esecutore sarà simile:
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] a) {
ExecutorService ex = Executors.newFixedThreadPool(50);
for (int i = 0; i < 50; i++) {
ex.execute(new Thread() {
public void run() {
try {
File f = File.createTempFile("testfile", "txt");
while (true) {
f.canRead();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
});
}
ex.shutdown();
ex.shutdownNow();
}
}
ohh, non ne ero consapevole. Perdonami per la mia ignoranza. Credo che dovrei leggere un libro di base, forse, Concurrency in pratica. Grazie! – cheekoo
@cheekoo, Java Concurrency in Practice è un libro altamente raccomandato. Effective Java di Joshua Bloch è un'altra buona scelta per una copertura materiale un po 'più ampia. –