Thread.currentThread()。getName()的值是否为常量值?

时间:2014-05-19 10:59:50

标签: java multithreading

我有一个与java thread相关的问题。

我有一个Facade类,我正在初始化内存分析器,然后创建一个task_map。地图的关键是Thread.currentThread().getName()

{
  test.startMemoryAnalyser(request, Thread.currentThread().getName()); 
}

我的任务正在进行中,我正在更新task_map中任务的状态。我正在尝试获取与Thread.currentThread().getName()键对应的地图元素的状态,但我得到了NullPointerException

在地图中插入数据的代码:

processMemoryMap.put(Thread.currentThread().getName(), requestStatus);

获取更新状态的代码:

Status s = processMemoryMap.get(Thread.currentThread().getName());
s.update(); //Throwing null pointer exception Both are called from same handler class.

由于这两个方法都来自同一个类,我希望得到我在上面的场景中所处的状态,但我得到的是null

请建议我你的想法。感谢您的时间和提前帮助: - )

1 个答案:

答案 0 :(得分:5)

  

Thread.currentThread()的值.getName()是否为常量值?

不,它不是,因为有一个setName(String)方法的明显原因。您无法保证getName()的结果将是常量,唯一,非空或以任何方式用作密钥。

出于上述应用程序的目的,您可能希望使用getId()方法:

  

返回此Thread的标识符。线程ID是创建此线程时生成的正长数。线程ID是唯一的,并且在其生命周期内保持不变。当线程终止时,可以重用该线程ID。

注意最后一句:如果您尝试在线程ID上创建索引的任务映射,则需要考虑到死线程中的ID最终会被重用的事实。 / p>

但是,如果您阻止的内容是唯一键,则getId()getName()更有用。