Java-ThreadLocal 与 ConcurrentHashMap

标签 java concurrency concurrenthashmap thread-local

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

最佳答案

这绝对是 ThreadLocal 的一个例子。

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

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

关于Java-ThreadLocal 与 ConcurrentHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21884359/

相关文章:

iphone - 核心数据保存崩溃

Java - ClassFileTransformer.transform(...) 并发调用相同的 classLoader className 对

java - 正确地从 ConcurrentHashMap 中删除值

java - ConcurrentHashMap 返回一个弱一致性迭代器,我们为什么要使用它呢?

java - 中文字符未在 JSP 上呈现

java - 如何创建一个包含 100 个随机数且每行 15 个数字的文件?

java - 使用java语言构建AWS-CDK时出现错误

Java 并发实践 list 6.2

java - 使用 JDK 8 编译但针对 JRE 7 的 ConcurrentHashMap 崩溃应用程序

java - 使 JScrollPane 自动向下滚动