public class SingletonDoubleCheckedLock {
private volatile static SingletonDoubleCheckedLock uniqueInstance;
private SingletonDoubleCheckedLock() {
}
public static SingletonDoubleCheckedLock getInstance() {
if (uniqueInstance == null) {
synchronized (SingletonDoubleCheckedLock.class) {
if (uniqueInstance == null) {
uniqueInstance = new SingletonDoubleCheckedLock();
}
}
}
return uniqueInstance;
}
}
如果在运行getInstance()
方法时发生任何错误(例如,在执行new SingletonDoubleCheckedLock()
但内存不足时),我仍然希望getInstance()
方法返回正确的结果。怎么做到这一点?
答案 0 :(得分:1)
问题:“如果在运行getInstance()方法时发生任何错误......我仍然希望getInstance()方法返回正确的结果。如何实现?”
简短的回答:你无法保证。
有很多条件可以抛出Throwable
Throwable
有两种主要类型(子类):Exception
和Error
。
Exception
用于指示应用程序中可能出现的阻止正常执行流程的情况,应用程序可能会在继续之前捕获并纠正该情况。必须最终捕获某些形式的异常(已检查的异常)。
Error
用于表示严重异常的情况,应用程序无法从中恢复,其原因可能超出了应用程序的控制范围。你可以捕获一个错误,但没有太多意义,因为情况可能无法恢复。
正如您所看到的,如果您的getInstance()
引发错误,那么在应用程序运行时您无能为力。如果发生异常,您只有恢复运动的机会。