繁体   English   中英

Java - ThreadLocal与ConcurrentHashMap

[英]Java - ThreadLocal vs ConcurrentHashMap

关于ThreadLocalConcurrentHashMap之间的性能差异,我有一个非常简单的问题。 在我的代码中的某些地方,我需要维护从Thread到某个Object的映射,这必须是线程安全的。 一种选择是使用ConcurrentHashMap ,一种是使用ThreadLocal 这些方法的任何优点/缺点,主要是在速度方面?

这绝对是ThreadLocal的一个例子。

ThreadLocal值存储在Thread对象中,而不是存储在并发映射中,因此绝对不涉及锁定,因此效率更高。 另请注意,当线程终止时,通过ThreadLocal附加到线程的值会自动丢弃,这在ConcurrentHashMap中不会发生。

但最后一点是:如果你有某些方式“重用”的线程,比如保存在池中的worker,你应该在将线程返回池之前清除ThreadLocal的值。 否则,您可能会将一个任务的上下文泄漏到下一个任务中,这可能会导致性能,正确性或安全性问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM