執行緒靜態在物件快取中的妙用

2022-03-03 06:21:27 字數 801 閱讀 2742

執行緒靜態標記靜態欄位的值對於每個執行緒都是唯一的。簡單來說,是只應用在靜態欄位上,而且對於每乙個執行緒都是獨立儲存的。

那麼,結合物件快取來說,需求如下:

1、一些工具類,需要占用一定資源,但又不希望太頻繁的建立該工具類。

2、需要適應多執行緒的情況

乙個例子就是stringbuilder類,stringbuilder類內部實現使用了char來儲存字元,我們需要使用stringbuilder來建立字串,而且希望不太頻繁的建立它,避免記憶體壓力。

下面,就是.net framework 4.5.1 中對stringbuildercache的實現:

internal

static

class

stringbuildercache}}

return

newstringbuilder(capacity);

}public

static

void

release(stringbuilder sb)

}public

static

string

getstringandrelease(stringbuilder sb)

}

帶完整注釋的版本可以參考:

採用stringbuidlercache類的例子是string.join方法,可以參考:

再總結下它的原理:通過執行緒靜態賦予了靜態欄位在多執行緒中獨立儲存的能力,再通過操作該靜態欄位來儲存快取物件。

ES6 Symbol在物件中的作用

宣告symbol 我們先來回顧一下我們的資料型別,在最後在看看symbol如何宣告,並進行乙個資料型別的判斷。var a new string var b new number var c new boolean var d new array var e new object var f symb...

ES6系列 10之Symbol在物件中的作用

在es5中 物件屬性名都是字串,這容易造成屬性名的衝突,比如,你使用了乙個他人提供的物件,但又想為這個物件新增新的方法 mixin 模式 新方法的名字就有可能與現有方法產生衝突,於是 es6 引入了symbol。symbol是一種新的原始資料型別,表示獨一無二的值。它是繼undefined null...

python執行緒中的執行緒鎖Lock物件

原語鎖定 或互斥鎖定 是乙個同步原語,狀態是 已鎖定 或者 未鎖定 之一。兩個方法 acquire 和 release 用於修改鎖定的狀態。如果狀態已鎖定,嘗試獲取鎖定將被阻塞,直到鎖定被釋放為止。如果有多個執行緒等待獲取鎖定,當鎖定釋放時,只有乙個執行緒能獲得它。等待執行緒獲得鎖定的順序沒有定義。...