博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JAVA并发编程实战】9、锁分段
阅读量:5248 次
发布时间:2019-06-14

本文共 2020 字,大约阅读时间需要 6 分钟。

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;            }        }    }}

 

转载于:https://www.cnblogs.com/cutter-point/p/6077199.html

你可能感兴趣的文章
织梦仿站第三课:网站的文件分割
查看>>
Windows 2003全面优化
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>
用sql删除数据库重复的数据的方法
查看>>
输出n阶“魔方阵”
查看>>
学习笔记21—PS换图片背景
查看>>
electron入门心得
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
Spring3.0 AOP 具体解释
查看>>
我的Hook学习笔记
查看>>
EasyUI DataGrid 中字段 formatter 格式化不起作用
查看>>
海量数据存储
查看>>
js中的try/catch
查看>>
[导入]玫瑰丝巾!
查看>>
自动从网站上面下载文件 .NET把网站图片保存到本地
查看>>
【识记】 域名备案
查看>>
STL uva 11991
查看>>
MY SQL的下载和安装
查看>>
自定义OffMeshLink跳跃曲线
查看>>