我有一个类,对于任何给定的线程只能实例化一次,通过使用 a ThreadLocal
,例如:
public class MyClass {
private static final ThreadLocal<MyClass> classInstance =
new ThreadLocal<MyClass>() {
@Override protected MyClass initialValue() {
return new MyClass();
}
};
private MyClass() {
}
public static MyClass getInstance() {
return classInstance.get();
}
}
现在,我希望这些线程特定的实例可以被另一个线程访问,所以我最终得到了这种解决方案:https ://stackoverflow.com/a/5180323/1768736
这个解决方案是使用 a Map
(我会选择 a ConcurrentHashMap
),使用线程特定的 ID(例如 a Map<long, MyClass>
)作为键。我正在考虑将其Thread.currentThread().getId()
用作密钥(提供一些机制来处理线程 ID 可以重用的事实)。
但这意味着我需要公开这个线程 ID,例如:
public class MyClass {
...
public long getId() {
//return the key associated with this MyClass instance in the Map.
//in my case, this would be the ID of the Thread
}
public static MyClass getMyClass(long threadId) {
//allow a Thread to access the MyClass instance of another Thread by providing an ID,
//in my case, that would be the Thread ID
}
}
所以我的问题是:公开 Thread 的 ID(由 Thread 返回的 ID)是一种不好的做法Thread.getId()
,还是我没有什么可担心的?我不知道为什么,但我的直觉告诉我我不应该那样做。