2017-02-27 128 views
4

在Pharo中是否存在對應於Java的ThreadLocals的等價物或實現類似行爲的方法?例如,在Hibernate中,ThreadLocals用於通過單個getCurrentSession方法調用提供一個線程(當前請求/上下文)「範圍」工作實例的統一體 - 名爲Session on Hibernate。開發人員無需擔心,只需相信該方法將返回正確的工作單元。 Pharo有可能嗎?ThreadLocal-like在Pharo Smalltalk

我在Pharo Books(Pharo的例子,Pharo enterprise和Deep Pharo)和in this page上瀏覽過此文件,但找不到有用的信息。

回答

7

在Pharo中,您使用了ProcessLocalVariable的子類。 例如:

"Create a class to store you variable" 
ProcessLocalVariable subclass: #MyVariable. 

"Use it like this" 
MyVariable value: myValue. 

"Inside your code, access to current value like this" 
MyVariable value. 

注意,更強大的比線程你有「動態變量」,這是相對於執行堆棧(比線程更精確的)本地變量 你使用這樣的:

"Create a class to store you variable" 
DynamicVariable subclass: #MyVariable. 

"Use it like this" 
MyVariable 
    value: myValue 
    during: [ 
     "... execute your code here... usually a message send" 
     self doMyCode ]. 

"Inside your code, access to current value like this" 
MyVariable value. 

這種變量提供相同的功能(它們甚至更強大),通常是最好的替代品。

+0

甜!非常感謝! – VitorCruz

+0

相關的好奇心:創建一個子類是非常必要的,或者我可以直接使用ProcessLocalVariable/DynamicVariable? – VitorCruz

+0

我能想到的唯一例子是你可能需要一個進程(或其中的一部分)的本地變量,它是一個緩存:你不希望緩存在特定計算之外可見。你知道任何其他可能有用的情況嗎? –