JavaRush /Java Blog /Random-JA /揮発性(講義 17 の例)
dimaMJ
レベル 25
Craiova

揮発性(講義 17 の例)

Random-JA グループに公開済み
一般に、講義 17 に例 c がありますvolatile。変数isCancelが使用されていないvolatile場合、この変数の値を別のスレッドから変更することで、他のスレッドはそれを知りません。例を書き直しました。メソッドにはrunスレッドの名前と値が表示されますisCancelが、変数が存在するかどうかに関係なくvolatile、ノックしてもすべてのフローで値が変化することがわかりました。同期を理解した後、volatile混乱してしまい、それを適用することができません。もしかして私がサンプルを間違って作成したのでしょうか?また、クラスClockを作成して から継承しThreadmain2 つのインスタンスを作成して両方を実行しようとしましたが、これも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