java内存模型

在并发编程的时候,线程之间的通行需要我们考虑.在java中线程通信依靠两种机制:
共享内存与消息传递
共享内存:
在java中,所有的实例域,静态域,和数组元素都在堆内存中,这部分内存所有线程共享.
局部变量,方法定义的参数和异常处理器参数是线程独享的
java线程之间的通信,有jmm控制,jmm决定一个线程堆共享变量的写入何时对另一个线程可见,定义了线程与本地内存的关系.每个线程在执行的时候,都会去主内存中复制一份线程执行需要数据的副本放在自己线程的栈上,在线程操作的时候,会通过操作栈上的数据,这就导致了线程访问堆上的数并不一定是最新的,对于这种情况我们可以考虑使用volatile来保证数据的可见性.
volatile的作用是当栈上数被修改时候,会去堆区修改,并且让其他线程上取得的指向这个数据的副本全部失效,必须要来堆区获取最新的值,这样保证了可见性.
synchronized可以修饰代码块,方法,他可以保证同一个时刻只有一个线程处于方法或代码块中,他的地城cpu实现原理是通过获取对象监视器实现的,获取对象监视器这个过程是排他的,保证了同一个时刻只有一个线程可以访问,每一个对象都有自己的监视器.执行方法的线程必须获取对象监视器才能进入同步代码块,而没有获取监视器的线程会阻塞子同步块或者方法入口处,进入阻塞状态.

如果有不对,请指出,谢谢了…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值