Me preguntaba si requerimos sincronización externa para usar los métodos en java.lang.Thread?¿Es java.lang.Thread una clase segura para subprocesos?
Por ejemplo, podemos llamar al método t1.isAlive() de cualquier hilo sin sincronización externa y esperar que volver:
cierto si t1 ya se ha iniciado, en caso contrario.
¿O es necesaria una sincronización externa para llamar a los métodos en java.lang.Thread?
public static void main(String args[]) {
final java.lang.Thread t1 = new java.lang.Thread(new java.lang.Runnable() {
@Override
public void run() {
while(true){
//task
}
}
});
java.lang.Thread t2 = new java.lang.Thread(new java.lang.Runnable() {
@Override
public void run() {
while (true) {
System.out.println(t1.isAlive()); // do we need synchronization before calling isAlive() ?
}
}
});
t2.start();
t1.start();
try {
java.lang.Thread.sleep(1000000);
} catch (java.lang.InterruptedException e) {
e.printStackTrace();
}
}
¿Está diciendo que un método * native * es automáticamente seguro para subprocesos? ¿O es simplemente que es tanto * nativo * como seguro para subprocesos en este caso? – Pacerier
La llamada es segura para subprocesos en general porque todos los métodos pertinentes están sincronizados. Específicamente para la llamada isAlive ya que es externa a la JVM, es independiente de los otros hilos en la JVM. Le dará una respuesta instantánea de si el hilo está vivo o no. Tenga en cuenta que si marca isAlive inmediatamente después del inicio, puede que no sea verdadero. –