假设我们在 Java 中有一个线程安全的单例类,这将是使用它的最好或更好的方法。例如,考虑我们有一个 Singleton 类:
public class MySingleTon {
// my thread-safe code goes here
}
我们有一个服务类,它以两种可能的方式使用上述单例,如下所示:
1:
public class MyService {
MySingleton singleton;
public void myMethod1() {
singleton = MySingleton.getInstance();
// code ...
}
public void myMethod2() {
singleton = MySingleton.getInstance();
// code...
}
public void myMethod3() {
singleton = MySingleton.getInstance();
// code...
}
}
或者
2:
public class MyService {
public void myMethod1() {
MySingleton singleton = MySingleton.getInstance();
// code ...
}
public void myMethod2() {
MySingleton singleton = MySingleton.getInstance();
// code...
}
public void myMethod3() {
MySingleton singleton = MySingleton.getInstance();
// code...
}
}
在第一种情况下,通过实例变量引用单例,在第二种情况下,将单例作为方法局部变量引用。考虑到上述两个片段都用于多线程环境,这是一个更好的选择,为什么?