java并发分段锁实践代码
2019-07-04 14:39
716 查看
以下是代码:
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; } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- java多线程与并发之java并发编程实践(三)
- 转:【Java并发编程】之二十三:并发新特性—信号量Semaphore(含代码)
- Java挑战高并发(3) 线程挂起、恢复与终止的正确方法(含代码)
- 【JAVA并发编程实战】9、锁分段
- Java 并发编程实践基础 读书笔记: 第二章 构建线程安全应用程序
- Java并发编程实践3.3-线程封闭
- Java 理论与实践: 并发集合类
- JNI技术实践(1) Java调用C/C++代码
- java多线程与并发之java并发编程实践(七)
- java多线程与并发之java并发编程实践(九)
- 【Java并发编程】之二十三:并发新特性—信号量Semaphore(含代码)
- EBS中Java并发请求代码编写规范
- JAVA并发实践学习
- JAVA并发编程实践- 线程的优点
- 【Java并发编程】之十三:生产者—消费者模型(含代码)(r)
- Java并发编程实践笔记之—线程
- Java线程与并发编程实践----等待通知(生产者消费者问题)线程
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
- 代码程序Java 程序优化的一些最佳实践Strut2教程-java教程
- 【Java并发编程】:volatile变量修饰符—意料之外的问题(含代码)