JavaRush /Blogue Java /Random-PT /Volátil (exemplo na aula 17)
dimaMJ
Nível 25
Craiova

Volátil (exemplo na aula 17)

Publicado no grupo Random-PT
Em geral, tem um exemplo c na aula 17 volatile, diz que se uma variável isCancelnão for usada volatile, então alterando os valores dessa variável de outro thread, o resto não saberá, reescrevi o exemplo, apenas no método runo nome do thread e o valor são exibidos isCancele descobriu-se que independente da variável estar presente volatileou não, o valor ainda muda para todos os fluxos, mesmo se você bater, fico completamente confuso; se eu descobri a sincronização, então estou volatileconfuso e não consigo aplicá-la de forma alguma. Talvez eu tenha criado o exemplo errado de alguma forma? Também tentei criar uma classe Clocke herdar de Thread, e maincriar duas instâncias e rodar as duas, também volatilenão funcionou, me ajudem, senão vou enlouquecer) Volátil (exemplo na aula 17) - 1
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();
                }
            }
        }
    }
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION