我可以让ConcurrentHashMap<Thread, object>
存储线程的数据并使用Thread.currentThread()
来检索它吗?我检查了Java源代码,发现currentThread()
是原生的,并且equals
未被覆盖。Thread.currentThread()是否总是返回相同的实例?
0
A
回答
3
你可以,但有一个内置的机制ThreadLocal只是为了这个目的。重新创建它的唯一原因是,如果您还需要从其“主人”以外的某个线程访问这些值,以便操纵它们。
ThreadLocal<Object> data = new ThreadLocal<Object>();
public Object getData() {
return this.data.get();
}
public void setData(Object data) {
this.data.set(data);
}
注意,对于每个线程的初始值是空的,但你可以提供的默认值:
ThreadLocal<Object> data = new ThreadLocal<Object>() {
protected Object initialValue() { return "foo"; }
};
1
是的,你总是会得到相同的Thread
对象,所以你可以这样做。
尽管如此,您可以考虑使用ThreadLocal
功能,它本质上是做同样的事情,但是具有特定的初始化语义。
1
你可以,但这种方法的问题是,你正在创建一个硬引用线程,这意味着即使线程被终止,它引用的对象也不会被GC收集。
相关问题
- 1. Thread.CurrentThread是否总是返回相同的实例?
- 2. 总是返回相同实例的类
- 3. 是否WindsorContainer.Resolve <T>()总是返回相同的实例?
- 4. Thread.currentThread()。getContextClassLoader()返回多个对象实例
- 5. SchedularFactory是否使用新方法返回相同的实例
- 6. canvas.getContext(“2d”)是否每次都返回相同的实例?
- 7. DateTime.ToString(“s”)是否总是返回相同的格式?
- 8. FlashScope.getCurrent(...)总是返回新的FlashScope实例
- 9. PetaPoco GetInstance()总是返回新的实例?
- 10. EntityManager.getReference它是否总是返回一个会话中的同一个实例?
- 11. Google App Engine datastore.get(key)是否总是返回相同的实体对象?
- 12. managedQuery总是返回相同的结果
- 13. java.nio.SocketChannel总是返回相同的数据
- 14. php filesize()总是返回相同的值
- 15. Random.Next总是返回相同的值
- 16. SimpleDateFormat总是返回相同的结果
- 17. Random.Next返回总是相同的值
- 18. localtimestamp总是返回相同的值
- 19. AVAudioSession总是返回相同的outputVolume
- 20. 函数总是返回相同的值
- 21. jQuery .selectable(),总是返回相同的ID?
- 22. Random.Next()总是返回相同的值
- 23. ExtractSURF总是返回相同的方向
- 24. boundingRectWithSize总是返回相同的CGRect
- 25. h2o.runif()总是返回相同的矢量
- 26. glReadPixels总是返回相同的值glClearColor
- 27. clEnqueueMapBuffer是否总是返回相同CL缓冲区的相同地址?
- 28. 实例变量总是返回零
- 29. QPluginLoader实例总是返回null
- 30. A *实现总是返回相同的值