我得到了一些代码,其中包含一些使用TheadLocal的类。
以下是一个示例实现:
public class MyClass {
public MyClass() {
}
// Class methods..
private static ThreadLocal<MyClass> factoryCache = new ThreadLocal<MyClass>() {
public synchronized MyClass initialValue() {
return new MyClass();
}
public synchronized MyClass get() {
return super.get();
}
public synchronized void set(MyClass value) {
super.set(value);
}
};
public static MyClass get() {
return factoryCache.get();
}
}
请注意,为了使用该类,将调用静态getter:MyClass.get(); 这样可以确保获得与当前运行线程对应的实例。
我的问题 - 这个类不包含成员或静态变量,这意味着类级别中没有共享对象。在这种情况下 - 我想知道在这里使用ThreadLocal是否有任何优势。让我们假设我使用这个类作为单线程(删除ThreadLocal部分),每个线程在输入方法时都会创建自己的堆栈(对吗?),那么在这种情况下是否有使用ThreadLocal的点? / p>
其他信息 - 这是一个处理许多并发http请求的Web应用程序,每个http请求使用已发布的类。
答案 0 :(得分:0)
线程安全是关于共享状态的。如果您的班级没有任何状态可以在线程之间共享,那么您不必担心线程安全。
因此,如果您的类没有字段,您可以安全地在多个线程(单例)之间共享该类的相同实例,甚至可以使其所有方法static
(因为它经常为各种实用工具)。
它不会导致任何问题,因为正如您所正确指出的,每个线程都有自己的堆栈,因此无法以任何方式在线程之间共享局部变量。