繁体   English   中英

volatile关键字无法停止Java中的循环

[英]volatile keyword can't stop loop in java

public class VolatileOne {
    private static boolean ready ;
    private static int number ;

    private static class ReaderThread extends Thread{
        @Override
        public void run() {
            while (!ready){
                Thread.yield();
            }
            System.out.print(number);
        }
    }

    public static void main(String[] args) {
        new ReaderThread().run();
        ready = true;
        number = 50;
    }
}

运行此代码后,程序不会停止,这很明显,因为线程将准备好的变量备份到自己进程的内存中。 当我使用volatile关键字修改读取时

private volatile static boolean ready ;

读取的变量此时不会复制到过程存储器中。 但是程序无法停止。 什么原因? 它与static关键字相关吗?

如果要让程序输出50并返回,该怎么办?

  1. 您需要调用start才能在另一个线程中执行代码。 检查一下 runstart之间的差异。

  2. 调用join以等待ReaderThread完成。

  3. volatile关键字可以在写入线程和读取线程之间建立一个事前发生的关系,您可以将number = 50; ready = true;之前ready = true; ,这使得确定的读者会发现number50时注意readytrue

例:

Thread reader = new ReaderThread();
reader.start();
number = 50;
ready = true;
reader.join();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM