스칼라의 DynamicVariable은 Java의 Thread Local State 변수와 동일한 효과를 가진다.
import scala.concurrent.ExecutionContext import scala.util.DynamicVariable object DynamicVariableExample extends App {
def execute(body: =>Unit) = ExecutionContext.global.execute(new Runnable {
def run() = body
})
val dyn = new DynamicVariable[Int](10)
def doSomething = println(Thread.currentThread().getName() + ":" + dyn.value)
dyn.withValue(1) { execute(doSomething) }
dyn.withValue(50) { execute(doSomething) }
println
}
결과
scala-execution-context-global-11:1
scala-execution-context-global-12:50
내부 코드를 살펴보면,java.lang.InheritableThreadLocal을 사용하고 있다.
class DynamicVariable[T](init: T) {
private val tl = new InheritableThreadLocal[T] {
override def initialValue = init.asInstanceOf[T with AnyRef]
}
public class InheritableThreadLocal<T> extends ThreadLocal<T> {
'scala' 카테고리의 다른 글
[scala] 마이크로 벤치마킹 툴 - scala meter 예제 (0) | 2017.07.21 |
---|---|
[scala] 콘솔에서 코드 붙여서 테스트하기 (paste) (0) | 2017.07.21 |
[scala] 변수를 사용하기 위한 underscore (0) | 2017.07.05 |
[scala] Church Rosser 이론 (Lambda calculus)에 대한 링크 펌질 (0) | 2017.07.04 |
[scala] Stream 의 concat은 #::이다. (0) | 2017.07.03 |