Mi pregunta es levemente complicada. Permítanme intentar explicarlo a fondo, pero si necesitan más detalles, siéntanse libres de preguntarme, los agregaré.¿Cómo se corta un hiloPoolExecutor con hilos 'Ocupados'?
Aprendí recientemente (por experimento) que si un hilo está trabajando continuamente, algo así como una operación entera en un ciclo while (verdadero), interrumpir el hilo no tiene ningún efecto en él. El hilo continúa como si nada hubiera pasado.
Ahora, ThreadPoolExecutors se eliminan mediante los métodos shutdown() o shutdownown(). Revisé el código de estos métodos, ellos usan la llamada a interrupt() para matar un hilo. Entonces, si todos los hilos están ocupados haciendo cosas, ¿cómo matarían a un ejecutor? Cómo se mata, por ejemplo, cuando lo usamos en aplicaciones de primavera.
Uno de estos ejecutor se verá así:
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, no estaba al tanto de eso. Perdón por mi ignorancia Adivina, debería leer algunos libros básicos, tal vez, concurrencia en la práctica. ¡Gracias! – cheekoo
@cheekoo, Java Concurrency in Practice es un libro muy recomendable. La Java efectiva de Joshua Bloch es otra buena opción para una cobertura material un poco más amplia. –