У меня есть поток:
class Foo extends Thread
{
boolean active = true;
public void run()
{
while(active)
{
//do stuff
}
}
public void end()
{
active = false;
}
public void hibernate()
{
synchronized(this)
{
wait();
}
}
}
Если другой поток вызывает end ()
, Foo
немедленно увидит, что активный
теперь ] ложь
? В частности, поскольку active
не volatile
, я не уверен, что это будет. Изначально я создал end ()
как умный способ избежать изменчивости, но теперь я не уверен, что он действительно сделает то, что я задумал.
Кроме того, если другой поток вызывает hibernate ()
, какой поток перейдет в спящий режим? Я собираюсь Foo
спать, поэтому, если это не поможет мне, было бы очень полезно альтернативное предложение.