标题:
Java细粒度锁实现的3种方式(1) 分段锁
[打印本页]
作者:
look_w
时间:
2018-12-15 13:37
标题:
Java细粒度锁实现的3种方式(1) 分段锁
1. 分段锁借鉴concurrentHashMap的分段思想,先生成一定数量的锁,具体使用的时候再根据key来返回对应的lock。这是几个实现里最简单,性能最高,也是最终被采用的锁策略,代码如下:
[url=]
[/url]
/**
* 分段锁,系统提供一定数量的原始锁,根据传入对象的哈希值获取对应的锁并加锁 * 注意:要锁的对象的哈希值如果发生改变,有可能导致锁无法成功释放!!!
*/
public
class
SegmentLock<T>
{
private
Integer segments = 16;
//
默认分段数量
private
final
HashMap<Integer, ReentrantLock> lockMap =
new
HashMap<>
();
public
SegmentLock() { init(
null
,
false
); }
public
SegmentLock(Integer counts,
boolean
fair) { init(counts, fair); }
private
void
init(Integer counts,
boolean
fair) {
if
(counts !=
null
) { segments
=
counts; }
for
(
int
i = 0; i < segments; i++
) { lockMap.put(i,
new
ReentrantLock(fair)); } }
public
void
lock(T key) { ReentrantLock lock
= lockMap.get(key.hashCode() %
segments); lock.lock(); }
public
void
unlock(T key) { ReentrantLock lock
= lockMap.get(key.hashCode() %
segments); lock.unlock(); }}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0