Estaba probando un ejemplo del método isAlive()
de enhebrado de java. Pero encontré que el método isAlive()
devuelve false
incluso si el hilo ya se ha iniciado. ¿Puede alguien decirme qué estoy haciendo mal? Aquí está el fragmento de código.El método isAlive() de la cadena Java no funciona correctamente?
package app;
public class ThreadAliveDemo {
public static void main(String[] args) {
Thread myThread;
myThread = new Thread()
{
public void run()
{
Thread.sleep(3000);
System.out.println("My Thread.");
}
};
myThread.setName("My Thread");
myThread.start();
if(!myThread.isAlive())
{
myThread.setName("My Thread");
myThread.start();
}
}
}
use Thread.getState() en su lugar, proporciona información adicional. comenzar un hilo dos veces tampoco tiene ningún efecto. – bestsss
En cuanto al consejo de @bestsss: el libro de Brian Goetz, Java Concurrency in Practice, dice: "El resultado de Thread.getState no debe usarse para el control de concurrencia y tiene una utilidad limitada para probar . Su utilidad principal es como fuente de depuración información." – WoodenKitty
@WoodenKitty, mientras que un subproceso no se ha iniciado getState() sería estable (puede necesitar cierta sincronización con el inicio del subproceso). El consejo de Goetz es muy sólido, pero no es aplicable en este caso. – bestsss