scala
[scala] DynamicVariable 예제
'김용환'
2017. 7. 7. 10:21
스칼라의 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> {