java并發(fā)分段鎖實踐代碼
更新時間:2019年07月04日 14:39:47 作者:cutter_point
這篇文章主要介紹了java并發(fā)分段鎖實踐代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
以下是代碼:
package cn.study.concurrency.ch11; /** * 鎖分段 * @author xiaof * */ public class StripedMap { //同步策略:就是對數(shù)組進行分段上鎖,n個節(jié)點用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]; //創(chuàng)建對應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; } /** * 清除所有的數(shù)據,但是沒有要求說要同時獲取全部的鎖的話,可以進行這樣的釋放操作 */ public void clear() { for(int i = 0; i < buckets.length; ++i) { synchronized(locks[i % N_LOCKS]) { buckets[i] = null; } } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
利用Java如何實現(xiàn)將二維數(shù)組轉化為鏈式儲存
鏈式結構不要求邏輯上相鄰的節(jié)點在物理位置上也相鄰,節(jié)點間的邏輯關系是由附加的指針字段表示的,通常借助于程序設計中的指針結構來實現(xiàn),這篇文章主要給大家介紹了關于利用Java如何實現(xiàn)將二維數(shù)組轉化為鏈式儲存的相關資料,需要的朋友可以參考下2021-12-12SpringBoot中的FailureAnalyzer使用詳解
這篇文章主要介紹了SpringBoot中的FailureAnalyzer使用詳解,Spring Boot的FailureAnalyzer是一個接口,它用于在Spring Boot應用啟動失敗時提供有關錯誤的詳細信息,這對于開發(fā)者來說非常有用,因為它可以幫助我們快速識別問題并找到解決方案,需要的朋友可以參考下2023-12-12