JavaRush /Blog Java /Random-PL /Lotny (przykład z wykładu 17)
dimaMJ
Poziom 25
Craiova

Lotny (przykład z wykładu 17)

Opublikowano w grupie Random-PL
Generalnie na wykładzie 17 jest przykład c volatile, który mówi, że jeśli zmienna isCancelnie zostanie użyta volatile, to zmieniając wartości tej zmiennej z innego wątku, reszta się o tym nie dowie, przepisałem przykład, tylko w metodzie runwyświetla się nazwa wątku i wartość isCanceli okazało się, że niezależnie od tego, czy zmienna jest obecna, volatileczy nie, wartość i tak zmienia się dla wszystkich przepływów, nawet jeśli zapukasz, jestem całkowicie zdezorientowany; jeśli wymyśliłem synchronizację, wtedy jestem volatilezdezorientowany i nie mogę jej zastosować w żaden sposób. Może w jakiś sposób źle stworzyłem przykład? Próbowałem też utworzyć klasę Clocki dziedziczyć z Thread, mainutworzyć dwie instancje i uruchomić obie, to też volatilenie zadziałało, pomóż mi, inaczej zwariuję) Lotny (przykład na wykładzie 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();
                }
            }
        }
    }
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION