加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – DynamicVariable无法使用Future

发布时间:2020-12-16 18:09:58 所属栏目:安全 来源:网络整理
导读:以下代码: import scala.concurrent.{Await,Future}import scala.concurrent.duration.Durationimport scala.util.DynamicVariableimport scala.concurrent.ExecutionContext.Implicits.globalobject Main { def main(args: Array[String]) = { val a = new
以下代码:

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:

This class extends ThreadLocal to provide inheritance of
values from parent thread to child thread: when a child thread is
created,the child receives initial values for all inheritable
thread-local variables for which the parent has values.

这是否意味着InheritableThreadLocal实际上不起作用?

解决方法

可能我不正确,但它在我看来,在你的例子中,涉及的2个线程之间没有父/子关系.

运行Future的线程是导入的全局执行上下文中的一个线程.我认为这个执行上下文是在withValue的第二个参数中的thunk开始执行之前创建的.

因此,您提供的文档中的摘录可能不适用于此情况.

如果我错了,请纠正我,因为我还想更好地理解动态变量概念.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读