为了账号安全,请及时绑定邮箱和手机立即绑定

java中的volatile关键字不能停止循环

java中的volatile关键字不能停止循环

呼啦一阵风 2022-07-06 18:44:09
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 关键字修改 readprivate volatile static boolean ready ;此时读取的变量不会被复制到进程内存中。但程序不能停止。什么原因?它与静态关键字有关吗?如果你想让程序输出50并返回,你应该怎么做?
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

  1. 您需要调用start才能在另一个线程中执行代码。检查这个run和之间的区别start

  2. 打电话join等待ReaderThread完成。

  3. volatile关键字可以在写线程和读线程之间建立起一个happens-before关系,你可以放number = 50;before ready = true;,这样可以保证读者会注意到number50什么时候注意到readytrue

例子:

Thread reader = new ReaderThread();

reader.start();

number = 50;

ready = true;

reader.join();


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信