스칼라의 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> {


Posted by '김용환'
,