Java threading / volatile

У меня есть поток:

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 спать, поэтому, если это не поможет мне, было бы очень полезно альтернативное предложение.

5
задан dkb 23 December 2015 в 11:35
поделиться