【问题标题】:Java - ThreadLocal vs ConcurrentHashMapJava - ThreadLocal 与 ConcurrentHashMap
【发布时间】:2014-03-20 00:17:19
【问题描述】:

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

【问题讨论】:

  • 拥有该对象的线程是唯一需要访问该对象的线程吗?如果是这样,正如 jwatkins 所指出的,`ThreadLocal' 显然更好。否则你不得不质疑这种线程间访问会采取什么形式。

标签: java concurrency concurrenthashmap thread-local


【解决方案1】:

这绝对是 ThreadLocal 的情况。

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

最后一件事:如果您有以某种方式“重用”的线程,例如保存在池中的工作线程,您很可能应该在将线程返回池之前清除 ThreadLocal 的值。否则,您可能会将一个任务的上下文泄漏到下一个任务中,这可能会带来性能、正确性或安全性问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2012-10-26
    • 2017-07-06
    • 2011-02-19
    • 2014-01-10
    相关资源
    最近更新 更多