如下代码:
import scala.concurrent.{Await, Future}
import scala.concurrent.duration.Duration
import scala.util.DynamicVariable
import scala.concurrent.ExecutionContext.Implicits.global
object Main {
def main(args: Array[String]) = {
val a = new DynamicVariable(1)
a.withValue(2) {
println(a.value)
Await.result(Future(println(a.value)), Duration.Inf)
}
}
}
正在打印:
2
1
但是DynamicVariable依赖于InheritableThreadLocal
文档中的内容:
此类扩展了ThreadLocal来提供从父线程到子线程的值继承:创建子线程时,子级将接收父级具有值的所有可继承线程局部变量的初始值。
这是否意味着InheritableThreadLocal实际上不起作用?
这是使事情起作用的文章:http :
//stevenskelton.ca/threadlocal-variables-scala-futures/
基本上,我们需要实现一个自定义ForkJoinPool
,在其中复制DynamicVariables的值。这不是很好的解决方法,但它可以工作。
你们是正确的评论和答案。
谢谢
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句