En general, hay un ejemplo c en la lección 17
volatile
, dice que si isCancel
no se usa una variable volatile
, entonces al cambiar los valores de esta variable de otro hilo, el resto no lo sabrá, reescribí el ejemplo, solo en el método run
se muestra el nombre del hilo y el valor isCancel
y resultó que independientemente de si la variable está presente volatile
o no, el valor aún cambia para todos los flujos, incluso si tocas, estoy completamente confundido; si Descubrí la sincronización, entonces estoy volatile
confundido y no puedo aplicarla de ninguna manera. ¿Quizás creé mal el ejemplo de alguna manera? También intenté crear una clase Clock
y heredar de Thread
, main
crear dos instancias y ejecutar ambas, tampoco volatile
funcionó, ayúdame, de lo contrario me volveré loco)
public static void main(String[] args)
{
Clock n = new Clock();
Thread thread1 = new Thread(n);
Thread thread2 = new Thread(n);
thread1.start();
thread2.start();
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
n.cancel();
}
public static class Clock implements Runnable
{
private volatile boolean isCancel = false;
public void cancel()
{
this.isCancel = true;
}
@Override
public void run()
{
while (true)
{
try
{ System.out.println(Thread.currentThread().getName()+" "+isCancel);
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
GO TO FULL VERSION