ThreadLocal的實際運用

2021-10-03 04:51:38 字數 2332 閱讀 3497

之前在利用zookeeper實現分布式鎖時候,使用了concurrenthashmap儲存currentpath等,現在有了threadlocal,我們可以直接使用threadlocal了

把myzookeeperlock的類進行修改,其他**不變,依然可以用

public

class

myzookeeperlock

implements

lock

catch

(unsupportedencodingexception e)

}@override

public

byte

serialize

(object obj)

throws zkmarshallingerror

catch

(unsupportedencodingexception e)}}

);if(

!this

.zkclient.

exists

(lockpath)

)catch

(zknodeexist***ception e)}}

@override

public

void

lock()

else

while(!

trylock()

)}private

void

waitforlock()

@override

public

void

handledatadeleted

(string s)

throws exception };

//找到我要監聽的節點

string beforepath = localbeforepath.

get();

//開始監聽

zkclient.

subscribedatachanges

(beforepath, listener);if

(this

.zkclient.

exists

(beforepath)

)catch

(interruptedexception e)

}//結束監聽

zkclient.

unsubscribedatachanges

(beforepath, listener);}

@override

public

void

lockinterruptibly()

throws interruptedexception

@override

public

boolean

trylock()

//找到所有的節點

list

chilren =

this

.zkclient.

getchildren

(lockpath)

; collections.

sort

(chilren)

;//判斷自己是不是排在最前面

if(currentpath.

equals

(lockpath +

"/"+ chilren.

get(0)

))else

return

false;}

@override

public

boolean

trylock

(long time, timeunit unit)

throws interruptedexception

@override

public

void

unlock()

deep--;if

(deep ==0)

else

//說明鎖徹底結束了

string currentpath = localcurrentpath.

get();

if(currentpath == null)

//移除這些沒必要的

localcurrentpath.

remove()

; localbeforepath.

remove()

;//刪除節點

this

.zkclient.

delete

(currentpath);}

@override

public condition newcondition()

}

redis 運維實際經驗紀錄

redis 改版的專案上線有兩個月了,記錄一下redis 相關的經驗,也給大家乙個參照 我們的redis server是一主一從,使用r710的機器,8核心,24g記憶體 每天約插入200萬左右的資料,現在庫里有3000萬條紀錄,占用了9g的記憶體 由於現在每天記憶體增長太快,擔心很快會無法負載,因...

關於threadlocal的來龍去脈

對tls更簡單的,但是更直觀的理解可以如下 基於c語言 1.全域性物件,全域性變數的作用域和生命週期是全域性的,這裡的全域性是指程序範疇,也就是說,如果你將其設計為全域性物件,全域性變數,就意味著你希望在多執行緒的環境中,仍然能共享和訪問。全域性物件,全域性變數不是說不讓多執行緒來訪問,而是說有的時...

ThreadLocal的個人理解

threadlocal的設計思想十分簡單,它的核心物件就是threadlocalmap,被宣告在thread類裡面,每個thread都持有乙個threadlocalmap,所以才能實現執行緒隔離,以達到儲存共享變數的作用 threadlocal.threadlocalmap threadlocals...