<分区>
ThreadLocal可以作为HashMap中的Key吗?
如果是这样,它是如何工作的,它通常是一个坏主意吗?我应该注意什么?
<分区>
ThreadLocal可以作为HashMap中的Key吗?
如果是这样,它是如何工作的,它通常是一个坏主意吗?我应该注意什么?
最佳答案
您可以像使用任何其他对象一样使用 ThreadLocal
作为 HashMap 键。它是否有任何意义是另一个话题。
基本上,如果您使用可变对象作为 HashMap
、HashSet
等对象的键,您可能会遇到问题,因为这些类通常使用 hashCode ()
(因此得名)将东西放入桶中并取回它。因此,如果您使用可变对象作为键,然后更改对象(以 hashCode 更改的方式),然后尝试通过键检索条目,您将不再找到该条目,因为映射将在错误的存储桶中查找条目。
在 ThreadLocal
的情况下,这不是问题,因为它不会覆盖 equals()
和 hashCode()
,因此如果您更改对象,hashCode()
将不会更改,因此您可以安全地使用 ThreadLocal
作为键。
关于java - ThreadLocal可以作为HashMap中的Key吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43183691/