java分段锁实践_java并发分段锁实践代码

以下是代码:

package cn.study.concurrency.ch11;

/**

* 锁分段

* @author xiaof

*

*/

public class StripedMap {

//同步策略:就是对数组进行分段上锁,n个节点用n%LOCKS锁保护

private static final int N_LOCKS = 16;

private final Node[] buckets;

private final Object[] locks;

private static class Node

{

private String name;

private Node next;

private String key;

private String value;

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Node getNext() {

return next;

}

public void setNext(Node next) {

this.next = next;

}

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

}

public StripedMap(int numBuckets)

{

buckets = new Node[numBuckets];

//创建对应hash的锁

locks = new Object[N_LOCKS];

for(int i = 0; i < N_LOCKS; ++ i)

{

locks[i] = new Object();

}

}

private final int hash(Object key)

{

//取绝对值

return Math.abs(key.hashCode() % buckets.length);

}

//get和clear

public Object get(Object key)

{

int hash = hash(key);

synchronized(locks[hash % N_LOCKS])

{

//分段上锁

for(Node m = buckets[hash]; m != null; m = m.next)

{

if(m.key.equals(key))

return m.value;

}

}

return null;

}

/**

* 清除所有的数据,但是没有要求说要同时获取全部的锁的话,可以进行这样的释放操作

*/

public void clear()

{

for(int i = 0; i < buckets.length; ++i)

{

synchronized(locks[i % N_LOCKS])

{

buckets[i] = null;

}

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-07-02

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值