JavaRush /Java Blog /Random-TW /揮發性(第 17 講的範例)
dimaMJ
等級 25
Craiova

揮發性(第 17 講的範例)

在 Random-TW 群組發布
一般來說,第17講有一個例子c volatile,它說如果一個變數isCancel沒有被使用volatile,那麼透過從另一個執行緒改變這個變數的值,其他人不會知道,我重寫了這個例子,只是在這個方法中,run顯示了線程的名稱和值isCancel,事實證明,無論變量是否存在volatile,所有流的值仍然會發生變化,即使你敲門,我也完全困惑了;如果我弄清楚了同步,然後我很困惑volatile並且無法以任何方式應用它。也許我以某種方式創建了錯誤的範例?我還嘗試創建一個類別Clock並繼承Thread,並main創建兩個實例並運行它們,它也volatile不起作用,幫助我,否則我會發瘋的) 揮發性(第 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();
                }
            }
        }
    }
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION