首页 新闻 搜索 专区 学院

什么时候需要对象锁?

0
悬赏园豆:20 [已解决问题] 解决于 2017-02-07 10:58

我的代码中有几种情况:

  1.一个线程对队列进行不断的put操作,同时另外一个线程对同一个队列进行不断的poll操作

  2.一个线程对Map进行不断的put操作,同时另外一个线程对同一个Map进行不断的get操作 (key相同)

  3.一个线程对Intger进行不断的累加操作,同时另外一个线程对同一个Intger进行读取操作

  请问上面这几种情况哪几种情况需要加锁?

  加锁的固定的情况是什么样的

Java水太深的主页 Java水太深 | 初学一级 | 园豆:119
提问于:2016-09-29 13:53
< >
分享
最佳答案
0

都需要加锁.

资源竞争问题出现条件.

1.有2个或以上的写入线程

2.读写分离时对多个连续的写入与读取操作有原子性需求

收获园豆:20
吴瑞祥 | 高人七级 |园豆:29369 | 2016-09-29 14:03

那除了synchronized(对象)以外,有没有什么更加高效的,保证读写能并发的办法?

Java水太深 | 园豆:119 (初学一级) | 2016-09-29 14:13

@Java水太深: 一般情况情况锁是不会有问题的.已经够高效了.

有效率问题的话那就是锁的使用方法问题.

吴瑞祥 | 园豆:29369 (高人七级) | 2016-09-29 14:16

@吴瑞祥:一个线程对Map进行不断的put操作,同时另外一个线程对同一个Map进行不断的get操作 (key相同)

这个情况下,我可以使用map的key作为锁吗?

Java水太深 | 园豆:119 (初学一级) | 2016-09-29 14:59

@Java水太深: 可以的。

Daniel Cai | 园豆:10424 (专家六级) | 2016-09-29 15:35

读写锁,readwritelock

THISISPAN | 园豆:200 (初学一级) | 2016-10-05 15:41
其他回答(1)
0

可以看一下我的这篇博客:http://www.cnblogs.com/qilong853/p/5916206.html,

线程安全性:num++操作为什么也会出问题?,除了synchronized以外,还可以不共享变量,使用原子变量,threadlocal,减少锁的粒度等。你可以使用currentHashMap,actomInteger

 

伪善者ql | 园豆:250 (菜鸟二级) | 2016-10-09 13:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册