天明伴雨晴 2022-01-25 01:03 采纳率: 62.5%
浏览 54
已结题

java 缓存一致性问题

最近看书看到了java缓存一致性的问题 是这些了一段代码


```java
`static int val = 0;
    public static void main(String[] args) throws Exception{
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (val < 5){
                    if(val != 0 ){
                        System.out.println(val);
                    }
                }
                System.out.println("over");
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0;i <5; i++){     ​
                   ​//val = i;//val ++;try {
                       ​TimeUnit.SECONDS.sleep(2);
                   ​} catch (InterruptedException e) {
                       ​e.printStackTrace();
                   ​}
               ​}
           ​}
       ​}).start();
   ​}

``
当第二条线程val ++ 注释去掉,第一个线程就能看见val的变化

当第二条线程val=i注释去掉,第一个线程就看不见val的变化陷入死循环

这是为什么

  • 写回答

2条回答 默认 最新

  • 日落西风又在吹 2022-01-25 10:04
    关注
    1. 变量不存在可见性,对于其他线程修改了,未刷新主内存并未通知工作线程重新获取到工作空间中
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月18日
  • 创建了问题 1月25日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度