我有一个与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
。
请建议我你的想法。感谢您的时间和提前帮助: - )
答案 0 :(得分:5)
Thread.currentThread()的值.getName()是否为常量值?
不,它不是,因为有一个setName(String)方法的明显原因。您无法保证getName()的结果将是常量,唯一,非空或以任何方式用作密钥。
出于上述应用程序的目的,您可能希望使用getId()方法:
返回此Thread的标识符。线程ID是创建此线程时生成的正长数。线程ID是唯一的,并且在其生命周期内保持不变。当线程终止时,可以重用该线程ID。
注意最后一句:如果您尝试在线程ID上创建索引的任务映射,则需要考虑到死线程中的ID最终会被重用的事实。 / p>
但是,如果您阻止的内容是唯一键,则getId()
比getName()
更有用。