2017-02-27 3 views
4

Java가 ThreadLocals 인 경우 Pharo에 상응하는 기능이 있습니까? 예를 들어, Hibernate에서 ThreadLocals는 단일 getCurrentSession 메소드 호출을 통해 스레드 (현재 요청/컨텍스트) "범위 지정"단일 작업 인스턴스 (Hibernate에서 Session이라는 이름)를 제공하는 데 사용됩니다. 개발자는 걱정할 필요가 없으며 메서드가 올바른 작업 단위를 반환한다고 생각할 필요가 없습니다. Pharo에서 가능합니까?Pharo Smalltalk에서 ThreadLocal과 유사

필자는 Pharo Books (Pharo 엔터프라이즈, Deep Pharo의 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

프로세스 (또는 그 섹션)에 로컬 변수가 필요한 위치를 생각할 수있는 유일한 예는 캐시입니다. 특정 계산 외부에서 캐시를 볼 수 없도록하려는 경우입니다. 이것이 유용 할 수있는 다른 경우에 대해 알고 있습니까? –