我正在尝试一些示例来创建完美(或接近完美的单例类)
我为此准备了一些代码(到目前为止,序列化问题尚未考虑在图片中)
public class SingletonDoubleCheck {
String message ;
private static Object lock=new Object();
private static SingletonDoubleCheck INSTANCE ;
private SingletonDoubleCheck() {
synchronized(lock) {
System.out.println("syncronized constructor...");
if(INSTANCE!=null) {
throw new UnsupportedOperationException("can not instansiate Singleton class more than once");
}
}
message = "Default Message";
}
public static SingletonDoubleCheck getInstance() {
System.out.println("getting instance...");
if(INSTANCE==null) {
System.out.println("syncronizing to get Instance...");
synchronized (lock){
System.out.println("syncronized get Instance...");
if(INSTANCE==null)
INSTANCE=new SingletonDoubleCheck();
}
}
return INSTANCE;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
运行此代码,我可以看到Synchronized块重新进入执行。因此,我有点困惑,在这种情况下应该真正使用可重入锁,以及如何决定在何处使用可重入锁以及在何处使用同步,因为它们都允许在同一线程中运行时对同一对象进行可重入锁。 >