java - ThreadLocal可以作为HashMap中的Key吗?

标签 java hashmap thread-local

<分区>

ThreadLocal可以作为HashMap中的Key吗?

如果是这样,它是如何工作的,它通常是一个坏主意吗?我应该注意什么?

最佳答案

您可以像使用任何其他对象一样使用 ThreadLocal 作为 HashMap 键。它是否有任何意义是另一个话题。

基本上,如果您使用可变对象作为 HashMapHashSet 等对象的键,您可能会遇到问题,因为这些类通常使用 hashCode ()(因此得名)将东西放入桶中并取回它。因此,如果您使用可变对象作为键,然后更改对象(以 hashCode 更改的方式),然后尝试通过键检索条目,您将不再找到该条目,因为映射将在错误的存储桶中查找条目。

ThreadLocal 的情况下,这不是问题,因为它不会覆盖 equals()hashCode(),因此如果您更改对象,hashCode() 将不会更改,因此您可以安全地使用 ThreadLocal 作为键。

关于java - ThreadLocal可以作为HashMap中的Key吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43183691/

相关文章:

java - Hashmap 与数组性能

java - servlet 中的线程局部变量

java - 自定义 ThreadLocal 类的 ThreadLocal 泄漏说明

java - 线程池中的线程局部内存泄漏

java - 如何在 linux 服务器上禁用 JDWP 接口(interface)?

java - 可重用Executor、ServiceExecutor等接口(interface)的目的

java - 如何在 StAX 中跟踪大文件的解析进度?

java - 设计java客户端

java - 在列表/ HashMap 中分组数据

java - Android 获取所有行数据时遇到问题