Java Volatile关键字可见性问题分析

Java 内容模型

具体可以查看这篇文章Java内存模型,大致就是,在Java多线程工作中,每个线程有自己的工作内存,变量存在主内存,在Java线程读取变量的时候,会优先在自己的工作内存中查找,当工作内存中不存在时,会通过Load操作进行读取变量,当对数据发生修改时会通过Save将变量更新到主内存中,而为了保证内存的可见性,可以通过Volatile关键字修饰变量,通过关键字修饰后的变量,在被一个线程更改后,新的值会对其他的线程立即得知。听起来是那么回事,但是自己理解的时候,用多线程发现有时候好像又不是那回事,好像普通变量也会在一个线程更新值的时候,对别的线程也会进行更新,这个问题目前没有解决还需要,继续了解Save和Load的时机。

普通变量(非Vola变量)的内存不可见性

package LockFuncs;


public class VolatileTest {
   

    boolean  isStop = false;

    public void test(int i){
   
        Thread t1 = new Thread(){
   
            public void run() {
   
                try {
   
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
   
                    e.printStackTrace();
                }
                isStop=true;
                System.out.println(isStop);
            }
        };
        Thread t2 =  new Thread(){
   
            public void run() {
   

                while (!isStop) {
   
                }
            }
        };

        t2.start();
        t1.start();
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值