多线程 - 关于Java内存可见性的问题

查看:104
本文介绍了多线程 - 关于Java内存可见性的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

请看以下代码

public class TestVolatile {
    
    public static void main(String[] args) throws InterruptedException {
        ThreadDemo td = new ThreadDemo();
        new Thread(td).start();
        
        Thread.sleep(1);
        while(true){
            if(td.isFlag()){
                System.out.println("------------------");
                break;
            }
        }
        
    }

}

class ThreadDemo implements Runnable {

    private boolean flag = false;

    @Override
    public void run() {
        
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
        }

        flag = true;
        
        System.out.println("flag=" + isFlag());

    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

}

Thread.sleep(1)换成Thread.sleep(1000)就能获取flag修改后的值,即td.isFlag()返回true
虽然看了Java内存模型的概念,但我不知道如何解释这段代码,谁能解释一下?

相关问题: Java多线程的工作内存是什么?

解决方案

你得先说说你的预期效果是啥?问问题要问清楚啊

这篇关于多线程 - 关于Java内存可见性的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆