社区
高性能WEB开发
帖子详情
java并发问题
funfeiba
2016-06-30 08:23:05
这个程序用来实现计数的,我觉得volatile修饰符可以去掉。因为“synchronized ”保证了value具有可见性,所以不需要volatile
...全文
2619
8
打赏
收藏
java并发问题
这个程序用来实现计数的,我觉得volatile修饰符可以去掉。因为“synchronized ”保证了value具有可见性,所以不需要volatile
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq_33838544
2017-01-21
打赏
举报
回复
学无止境-逆流而上
2016-09-05
打赏
举报
回复
写上了锁,没什么好说的。读没有上锁,也是有竞争关系的,因为java变量在工作内存、寄存器上与主内存是有不一致的情况,volatile就保证每次取跟主内存一直。
李秀才
2016-09-04
打赏
举报
回复
引用 2 楼 nyq1999 的回复:
volatile 是给get用得
一语中的。
it_chenfanglin
2016-07-15
打赏
举报
回复
volatile是无法保证 value++线程安全的,不过你加了synchronized,其实就不必要volatile修饰了; 但是在高并发情况下,我建议使用 AtomicInteger value = new AtomicInteger ()
ArayChou
2016-07-14
打赏
举报
回复
cpu有cache cpu有cache cpu有cache cache命中不会去主内存取 编译器有优化,如果以前刚好读取过变量进入寄存器.编译器会认为再读入一次很傻再读入一次很傻再读入一次很傻.有了volatile关键字,编译器不会自作聪明. 另外,有些应用场景,getValue()也可能需要添加synchronized关键字,防止读的过程中值被修改
nyq1999
2016-07-13
打赏
举报
回复
volatile 是给get用得
lecky-fu
2016-07-08
打赏
举报
回复
根据监视器锁规则提供的happen-before规则,synchronized能够保证临界区代码块退出之后对于后续代码具有可见性。 临界区代码块退出之后,才会将临界区内的变量全部刷新回主内存,并不能立即保证变量value的可见性。 而volatile修饰value保证在value变量上的任何修改会立即被其他线程看到。 对于上面的那个例子: 如果临界区内代码执行完value++之后,并没有立即退出临界区,那么value变量的值可能并没有被刷新回主内存,不具备可见性。
JAVA
并发
编程实践.pdf
《
JAVA
并发
编程实践》随着多核处理器的普及,使用
并发
成为构建高性能应用程序的关键。
Java
5以及6在开发
并发
程序中取得了显著的进步,提高了
Java
虚拟机的性能以及
并发
类的可伸缩性,并加入了丰富的新
并发
构建块。在...
Java
虚拟机
并发
编程
《
java
虚拟机
并发
编程》是
java
并发
编程领域的里程碑之作,由资深
java
技术专家、
并发
编程专家、敏捷开发专家和jolt大奖得主撰写,amazon五星级畅销书。它系统深入地讲解在jvm平台上如何利用jdk同步模型、软件事务内存...
Java
7
并发
编程实战手册 pdf全本
本书介绍了
Java
并发
API的方方面面,提供了使用这一新功能的必备技巧,及介绍了
Java
并发
API的所有功能,也特别强调了在
Java
7版本中的新功能。本书包含60多个实用的案例和技巧,可以帮助读者快速开始实践和体验
并发
...
Java
.Concurrency.in.Practice.pdf
Java
.Concurrency.in.Practice.pdf
Java
并发
问题
、产生的原因及解决方法
并发
问题
是什么
并发
问题
就是线程不安全,当多线程同时读写一个变量是,因为原子性,缓存可见性,指令重排序等原因,导致变量的实际执行结果和预期不一致
并发
问题
出现的场景 静态变量,多线程访问类的同一实例 静态...
高性能WEB开发
25,985
社区成员
4,366
社区内容
发帖
与我相关
我的任务
高性能WEB开发
高性能WEB开发
复制链接
扫一扫
分享
社区描述
高性能WEB开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章