我很好奇以下示例代码是否是线程安全的:
public class Test { [ThreadStatic] private static Foo current; public static Foo GetFoo() { return current ?? (current = new Foo()); } } public class Foo { }
通常情况下,我会使用Lazy
,但由于每个单独的线程有一个单独的变量,该属性本质上应该是线程安全的,这是正确的吗?
谢谢.
您提供的代码看起来非常安全.如果您对此感到满意,Lazy
可以使用ThreadLocal
哪种方式以类似的方式工作,但是保存其值线程安全和每个线程.
// Thread-Local variable that yields a name for a thread ThreadLocalThreadName = new ThreadLocal (() => { return "Thread" + Thread.CurrentThread.ManagedThreadId; });
https://msdn.microsoft.com/en-us/library/dd642243(v=vs.110).aspx