У меня работает поток, когда флаг равен true, но когда я изменяю флаг на false, он не умирает.
public static void main(String[] args)
{
try
{
MyThread mt = new MyThread();
mt.start();
Thread.sleep(1000);
mt.setRunning(false);
System.out.println("set running false");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static class MyThread extends Thread
{
private boolean isRunning = true;
public boolean isRunning()
{
return isRunning;
}
public void setRunning(boolean isRunning)
{
this.isRunning = isRunning;
}
public void run()
{
System.out.println("run");
while (isRunning == true){
}
System.out.println("run over!");
}
}
Я знаю, что определение «isRunning» как volatile решит проблему, но когда не является volatile, «isRunning» не должен быть виден в какой-то момент в MyThread?