首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

构建高性能服务(2)java高并发锁的3种实现

2012-06-28 
构建高性能服务(二)java高并发锁的3种实现提高系统并发吞吐能力是构建高性能服务的重点和难点。通常review

构建高性能服务(二)java高并发锁的3种实现

提高系统并发吞吐能力是构建高性能服务的重点和难点。通常review代码时看到synchronized是我都会想一想,这个地方可不可以优化。使用synchronized使得并发的线程变成顺序执行,对系统并发吞吐能力有极大影响,我的博文?http://maoyidao.iteye.com/blog/1149015?介绍了可以从理论上估算系统并发处理能力的方法。

?

那么对于必须使用synchronized的业务场景,这里提供几个小技巧,帮助大家减小锁粒度,提高系统并发能力。

?

初级技巧 - 乐观锁

乐观锁适合这样的场景:读不会冲突,写会冲突。同时读的频率远大于写。

?

以下面的代码为例,悲观锁的实现:

?

Map locks = new Map();List lockKeys = new List();for(int number : 1 - 10000) {   Object lockKey = new Object();   lockKeys.add(lockKey);locks.put(lockKey, new Object());}public void doSomeThing(String uid) {   Object lockKey = lockKeys.get(uid.hash() % lockKeys.size());   Object lock = locks.get(lockKey);      synchronized(lock) {      // do something   }}
?

?

关于高性能缓存的设计,请参考构建高性能服务系列之一:http://maoyidao.iteye.com/blog/1559420

?

1 楼 maoyidao 11 小时前   还有一种思路,如果读远远大于写,写全部用一个单线程完成。使用volatile关键字。volatile只提供可见性,即线程能发现最新的修改值,但不能保证原子性。因此需要使用单线程写,但多并发的读线程可以立刻看到最新的修改。

热点排行