JavaRush /Java 博客 /Random-ZH /挥发性(第 17 讲中的示例)
dimaMJ
第 25 级
Craiova

挥发性(第 17 讲中的示例)

已在 Random-ZH 群组中发布
一般来说,第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