首页 > 编程语言 > 详细

java并发浅析第一篇

时间:2014-11-24 02:07:07      阅读:211      评论:0      收藏:0      [点我收藏+]

?

1.java 内存模型,其实管理java内存模型和os操作内存可以类比。

? ?java里面工作内存其实就是栈,主内存就是堆。

? 操作系统中存在可见性问题,解决方案即缓存一致性,比如两个cpu共同加载了一个内存块,A进行读,B进行写,则B会发送一个写广播,在cpu间进行通信,此时写的优先级会大于读的优先级,所以A收到写广播,会将缓存中的变量置为失效,重新从内存中加载该变量。

? 那么java线程之间同样存在可见性问题,线程A读取变量value,线程B写变量value,线程B写的变量不一定会立刻同步到主存,线程A读取变量不一定会从主存中读取变量。


bubuko.com,布布扣
?

2.java存在哪些并发问题?

? ?一.指令重排序问题,重排序并不意味着所有程序都是杂乱无章的,重排序只是重排序没有相互依赖的代码。比如构造器中创建对象,但是在还没有初始化完成变量之前就已经return了。

? ?二.非volatile的64位变量赋值,其它线程可能读取到的是没有操作完成的半个变量

? ?三.读取到的数据已经失效,已经被其它线程修改了。

?

3.java并发有哪些解决方案?

? 一.第一个问题在某些情况下可以使用定义final变量,使指令重排序失效,JMM内存模型要求final类型的变量的初始化动作必须在return之前完成。

? 二.第二个问题当然就是指定volatile。后面单独讨论下volatile。

? 三.进行加锁的动作

? 四.ThreadLocal定义线程内的变量。

?

java并发浅析第一篇

原文:http://labreeze.iteye.com/blog/2159505

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!