java并发分段锁实践代码

网友投稿 251 2023-01-02


java并发分段锁实践代码

以下是代码:

package cn.study.concurrency.ch11;

/**

* 锁分段

* @author xiaof

*

*/

public class StripedMap {

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

private static final int N_LOCrmknpVoqKS = 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))

rrmknpVoqeturn m.value;

}

}

return null;

}

/**

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

*/

public void clear()

{

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

{

synchronized(locks[i % N_LOCKS])

{

buckets[i] = null;

}

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:短视频接口测试工具下载(短视频接口api)
下一篇:微服务网关选型(微服务技术选型)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~