当前位置: 首页 > 面试题库 >

有没有办法迭代或复制Java ThreadLocal的所有值?

邢俊悟
2023-03-14
问题内容

内容:

static ThreadLocal<MyType> threadLocalMyType = ...

我想说的是:

for (ThreadLocalEntry e: threadLocalMyType.getMapLikeThing() {
    // Thread t = e.getKey(); 
    // I don't need the thread value right now, but it might be useful for 
    // something else.

    MyType theMyType = e.getValue();
    // [...do something with theMyType...]
}

问题答案:

一种方法是手动处理此问题:

  • 使用包装ThreadLocal(扩展)
  • 只要设置了值,就保留(staticMap线程和值

或者,通过一些反射(getDeclaredMethod()setAccessible(true)),您可以:

  • 呼叫 Thread.getThreads()
  • 调用yourThreadLocal.getMap(thread)(针对上述每个线程)
  • 呼叫 map.getEntry(yourThreadLocal)

第一是更优选的。



 类似资料:
  • 例如,-从索引0迭代到索引10。 -但从10到0不起作用,如何使用流API实现?

  • 问题内容: Go的范围可以遍历地图和切片,但是我想知道是否有一种方法可以遍历一系列数字,例如: 还是有一种方法可以像Go语言中的Ruby 类那样在Go中表示整数范围? 问题答案: 您可以并且应该只编写一个for循环。简单,明显的代码就是Go方式。

  • 我有很多图像在绘制,我希望放入一个数组。手动将它们放入数组会花费太长的时间和代码。我想知道是否有一种方法来循环,如下所示:

  • 假设您有一个包含3个值的枚举: 你用某种方法转换它的所有值,认为你已经处理了所有的情况: 然后,稍后向枚举添加新值: 一切仍然编译正常,除了你在方法中默默地错过了的案例。有没有办法在这种情况下引发编译时错误? 编辑:不明白为什么这被标记为在Java中运行时添加和删除枚举元素的重复。由于答案是“否”,这意味着在编译时应该知道枚举的所有值,因此我所要求的应该是编译器/某些代码分析工具实现的,对吧?

  • 问题内容: 我想知道是否有可能以编程方式发现特定API的所有端点。 因此,例如,如果我使用浏览器或curl获取此URL:https : //api.twitter.com/1.1/ 我可能会收到类似以下内容的JSON响应: 当然,Twitter可以选择发布还是不发布这种格式。因此,作为一个附带问题,是否有任何Java或Java库可以自动映射和发布您在控制器中创建的API路由? 问题答案: 由于没有

  • 有没有办法列出AWS中的所有资源?对于所有区域,所有资源...例如列出所有EC2实例、所有VPC、API Gateway中的所有API等...我想列出我帐户的所有资源,因为我很难找到我现在可以放弃的资源。