【问题标题】:如何将名称设置为 ThreadLocal 的实例 [关闭]
【发布时间】:2022-01-22 13:13:03
【问题描述】:

我想为 WebDriver 类型的 ThreadLocal 变量的每个实例设置名称。然后按名称获取 ThreadLocal 实例。有没有办法按名称设置和获取 ThreadLocal 实例?

这是我要添加 set 和 get 函数的课程。

public class DFactory {
    private DFactory() {

    }

    private static DFactory dInstance= new DFactory();

    public static DFactory getInstance() {
        return dInstance;
    }

    ThreadLocal<WebDriver> driver = new ThreadLocal<WebDriver>();

    public WebDriver getDriver() {
        return driver.get();
    }

    public void setDriver(WebDriver driverParam) {
        driver.set(driverParam);
    }
}

【问题讨论】:

  • ...什么名字?
  • 我不清楚你想做什么。 “按名称获取 ThreadLocal 实例”究竟是什么意思?请编辑您的问题并解释。
  • 我需要将名称设置为 ThreadLocal 的实例,类似于我们使用 Thread.setName() 和 Thread.getName() 对 Thread 所做的操作。
  • 看你的例子,我不明白你为什么需要一个名字。请向我们展示说明为什么ThreadLocal“需要”一个名称的代码......我们可以(也许)提出一个实际上可行的替代方案。

标签: java multithreading


【解决方案1】:

有没有办法按名称设置和获取 ThreadLocal 实例?

不,没有办法。

ThreadLocal 变量没有名称,不能通过名称访问。这不是ThreadLocal API 的一部分。

目前尚不清楚您要在这里实现什么,但一种可能性是创建一个类型为 Map&lt;String, Object&gt;ThreadLocal 并将您的“命名”变量存储在映射中。

【讨论】:

  • 我的目的是创建线程安全的 WebDriver 实例并通过它的名称访问它。我知道我们可以使用 Thread.setName() 和 Thread.getName() 在 Java 中为 Thread 类的实例设置名称和 getName。我想通过使用 ThreadLocal 来做同样的事情。
  • 好吧,恐怕你做不到。寻找一种不同的方式来实现你想要做的事情。
  • 感谢斯蒂芬 C!您对使用 Map 的建议就像一个魅力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2018-01-05
相关资源
最近更新 更多