JavaRush /Java Blogu /Random-AZ /Uçucu (mühazirə 17-dəki nümunə)
dimaMJ
Səviyyə
Craiova

Uçucu (mühazirə 17-dəki nümunə)

Qrupda dərc edilmişdir
Ümumiyyətlə, 17-ci mühazirədə c misalı var volatile, deyir ki, əgər dəyişən isCancelistifadə edilmirsə volatile, bu dəyişənin qiymətlərini başqa bir mövzudan dəyişdirməklə, digərləri bu barədə bilməyəcəklər, nümunəni yenidən yazdım, yalnız metodda runipin adı və dəyəri göstərilir isCancelvə məlum oldu ki, dəyişənin mövcud olub volatile-olmamasından asılı olmayaraq, bütün axınlar üçün dəyər yenə də dəyişir, hətta döysəniz belə, tamamilə çaşmışam; əgər mən sinxronizasiyanı başa düşdüm, sonra volatileçaşqın oldum və heç bir şəkildə tətbiq edə bilmirəm. Bəlkə nümunəni nədənsə səhv yaratmışam? Mən də bir sinif yaratmağa Clockvə -dən miras almağa Thread, mainiki nümunə yaratmağa və hər ikisini işə salmağa çalışdım, bu da volatileişləmədi, mənə kömək edin, əks halda dəli olacağam) Uçucu (mühazirə 17-dəki nümunə) - 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();
                }
            }
        }
    }
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION