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

最佳答案

这绝对是 ThreadLocal 的情况。

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

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

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

10-12 04:54