【问题标题】:Setting setter getter class in thread local在线程本地设置 setter getter 类
【发布时间】:2014-03-10 14:15:26
【问题描述】:

我有一个 setter getter 类,我在服务方法的开头在 ThreadLocal 中设置该类。

reqUtil = new RequestUtil();

ThreadLocal.set(reqUtil);

现在为 doPost 中的 reqUtil 方法设置值。

reqUtil.setHeaders(headerList);

reqUtil.setUser(request.getParameter("UserName"))

当我尝试在其他类中使用 threadlocal 获取这些 setter 方法的值时。有时我得到值,而有时我得到空值。

ThreadLocal.get().getUserName() 有时返回值,有时返回 null。

我在这里做错了吗?

【问题讨论】:

  • 正如答案中提到的,每个线程都必须设置它,然后只有它的 get 方法会返回值。可能是您在错误的地方使用了 ThreadLocal。您的应用程序是否使用线程?看起来你的网络应用程序。如果您只想存储用户详细信息,可以将其存储在其用户会话中。

标签: java thread-local


【解决方案1】:

顾名思义,ThreadLocal 变量是当前线程的本地变量。因此,您可能在一个线程中设置了 reqUtil 实例,但对于其他线程,它保持为 null

您的doPost 方法可能是从不同的线程调用的。因此,您有时会获得价值,有时却得不到。

您应该确保为所有线程正确初始化ThreadLocals

也许ThreadLocal 不是您所需要的?

【讨论】:

  • 我确信我设置在一个线程中。例如。当我尝试进入 doPost 方法本身时,它返回 null 。仅在服务方法中,我正在设置值。如果 doPost 从不同的线程调用,那应该只通过服务方法来吗?
  • 如果你只是简单地从doPost调用服务方法,服务方法在与doPost相同的线程中执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2017-11-22
  • 2011-06-13
  • 1970-01-01
相关资源
最近更新 更多