我目前正在尝试实现一个简约的 ThreadLocal 类。我知道这是在 DotNet 4 中实现的,但我处于无法升级的情况。
我的想法是使用一个非常简单的类,它包含一个弱哈希表,并且只存储基于当前线程的对象作为键。(我们有一个弱哈希表的自定义实现)
您认为这是一种可行的方法还是需要考虑任何线程问题?可以使用当前线程作为键,内存问题等吗?
public class SimpleThreadLocal<T>
{
private readonly WeakHashtable _threadToValue;
public SimpleThreadLocal()
{
_threadToValue = new WeakHashtable();
}
public void Set(T value)
{
lock (this)
{
_threadToValue[Thread.CurrentThread] = value;
}
}
public T Get()
{
lock (this)
{
return (T) _threadToValue[Thread.CurrentThread];
}
}
}