java并發(fā)分段鎖實(shí)踐代碼
以下是代碼:
package cn.study.concurrency.ch11;
/**
* 鎖分段
* @author xiaof
*
*/
public class StripedMap {
//同步策略:就是對(duì)數(shù)組進(jìn)行分段上鎖,n個(gè)節(jié)點(diǎn)用n%LOCKS鎖保護(hù)
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)建對(duì)應(yī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)
{
//取絕對(duì)值
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ù)據(jù),但是沒(méi)有要求說(shuō)要同時(shí)獲取全部的鎖的話(huà),可以進(jìn)行這樣的釋放操作
*/
public void clear()
{
for(int i = 0; i < buckets.length; ++i)
{
synchronized(locks[i % N_LOCKS])
{
buckets[i] = null;
}
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot2.0.3打印默認(rèn)數(shù)據(jù)源為 HikariDataSource (null)問(wèn)題
這篇文章主要介紹了SpringBoot2.0.3打印默認(rèn)數(shù)據(jù)源為 HikariDataSource (null)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
詳解eclipse創(chuàng)建maven項(xiàng)目實(shí)現(xiàn)動(dòng)態(tài)web工程完整示例
這篇文章主要介紹了詳解eclipse創(chuàng)建maven項(xiàng)目實(shí)現(xiàn)動(dòng)態(tài)web工程完整示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
JavaWeb Servlet實(shí)現(xiàn)網(wǎng)頁(yè)登錄功能
這篇文章主要為大家詳細(xì)介紹了JavaWeb Servlet實(shí)現(xiàn)網(wǎng)頁(yè)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
Java集合框架Collections原理及用法實(shí)例
這篇文章主要介紹了Java集合框架Collections原理及用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java RabbitMQ的工作隊(duì)列與消息應(yīng)答詳解
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03

