java内存模型jmm

首先java的内存模型有两个特征:
        1.visibility 可视性:多进程间数据可以共享。
        2.ordering 有序性:对内存进行的操作应该是有序的。
    
    在jvm虚拟机中,有一个主内存,其下所有的线程都共用这个主内存。主内存中放置着这个进程所有的变量。
    而在这个进程里的每一个线程都有自己独立的一个工作内存,工作内存里存放着这个线程所需要使用的变量,而这些变量都是主内存中的拷贝。工作进程为每个线程独有,不可与其他线程共享。
    当内存需要对某个变量进行操作的时候,首先会从主内存中获取一个变量的拷贝,存放到工作内存当中,然后根据程序需要对变量进行修改。最后再写入主内存,覆盖掉原来的值。但是,如果多个线程共同使用一个变量的时候,就会出现问题。由于cup处理任务采用是来回切换的模式,可能到一个线程刚才修改完工作内存的值以后,还没有来得及去写入主内存,cpu就切换到另个线程运行,而这个线程又读取的是主内存中同一个变量。所以这样就造成了共用数据的错误。俗称线程不安全。
    针对这个问题,可以采取的解决办法有:
        1.synchronized关键字
        2.volatile关键字
        3.final变量
        4.java.util.concurrent.lock包(since jdk 1.5)
        5.java.util.concurrent.atmoic包(since jdk 1.5)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值