JavaRush /Java Blog /Random-IT /Volatile (esempio nella lezione 17)
dimaMJ
Livello 25
Craiova

Volatile (esempio nella lezione 17)

Pubblicato nel gruppo Random-IT
In generale, c'è un esempio c nella lezione 17 volatile, dice che se una variabile isCancelnon viene utilizzata volatile, quindi modificando i valori di questa variabile da un altro thread, gli altri non lo sapranno, ho riscritto l'esempio, solo nel metodo runviene visualizzato il nome del thread e il valore isCancele si è scoperto che indipendentemente dalla presenza volatileo meno della variabile, il valore cambia comunque per tutti i flussi, anche se bussi sono completamente confuso; se ho capito la sincronizzazione, quindi sono volatileconfuso e non riesco ad applicarla in alcun modo. Forse ho creato l'esempio in modo sbagliato in qualche modo? Ho anche provato a creare una classe Clocked ereditare da Thread, a maincreare due istanze ed eseguirle entrambe, inoltre volatilenon ha funzionato, aiutami, altrimenti impazzisco) Volatile (esempio nella lezione 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();
                }
            }
        }
    }
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION