Public Class 具有相同的私有静态变量 class
Public Class with private static variable of same class
前几天查看一些 Java 代码,我看到了一些我以前从未见过的东西并且有点困惑。部分代码如下所示:
public class PreferredAlternateProxy {
...
private static PreferredAlternateProxy instance;
...
public static PreferredAlternateProxy getInstance(){
if(instance == null)
createInstance();
return instance;
}
private static synchronized void createInstance(){
if(instance == null)
instance = new PreferredAlternateProxy();
}
}
声明与 public class 相同 class 的静态 属性 的目的是什么?这在什么情况下有用?
使第二个方法 (createInstance()) 同步的目的是什么?
设计模式 之类的东西可以告诉您高效编写代码的方法。您给出的示例称为 Singleton。此模式的目的是创建 one 和唯一的 class 实例。它需要:
- 私有构造函数 - 任何人都无法创建 class.
的实例
- 私有静态字段 - 将生成的实例保存在内存中。
- Public 静态方法 - 即 "gatekeeper",其工作是 return 实例。
示例:
public class Singleton() {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
上面的例子叫做Lazy Initialization,因为直到你第一次调用getInstance()
才会创建实例。
下面的示例显示了 早期初始化 ,它在 class 加载到内存中时立即创建实例。
public class Singleton() {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
您问题中的代码正在实现 Java 单例模式。
- 您的示例中的 PreferredAlternateProxy 是静态创建 class
level 变量,因为您只需要一个实例。
- 添加了第二种方法,使其成为线程安全的,同时也降低了直接调用同步方法的开销。虽然我们只需要它用于可能创建单独实例的前几个线程。它被称为双重检查锁定原则。因此,如果创建了实例,那么您将不再调用同步方法。
希望这可以帮助您更好地理解它。
干杯!
前几天查看一些 Java 代码,我看到了一些我以前从未见过的东西并且有点困惑。部分代码如下所示:
public class PreferredAlternateProxy {
...
private static PreferredAlternateProxy instance;
...
public static PreferredAlternateProxy getInstance(){
if(instance == null)
createInstance();
return instance;
}
private static synchronized void createInstance(){
if(instance == null)
instance = new PreferredAlternateProxy();
}
}
声明与 public class 相同 class 的静态 属性 的目的是什么?这在什么情况下有用?
使第二个方法 (createInstance()) 同步的目的是什么?
设计模式 之类的东西可以告诉您高效编写代码的方法。您给出的示例称为 Singleton。此模式的目的是创建 one 和唯一的 class 实例。它需要:
- 私有构造函数 - 任何人都无法创建 class. 的实例
- 私有静态字段 - 将生成的实例保存在内存中。
- Public 静态方法 - 即 "gatekeeper",其工作是 return 实例。
示例:
public class Singleton() {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
上面的例子叫做Lazy Initialization,因为直到你第一次调用getInstance()
才会创建实例。
下面的示例显示了 早期初始化 ,它在 class 加载到内存中时立即创建实例。
public class Singleton() {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
您问题中的代码正在实现 Java 单例模式。
- 您的示例中的 PreferredAlternateProxy 是静态创建 class level 变量,因为您只需要一个实例。
- 添加了第二种方法,使其成为线程安全的,同时也降低了直接调用同步方法的开销。虽然我们只需要它用于可能创建单独实例的前几个线程。它被称为双重检查锁定原则。因此,如果创建了实例,那么您将不再调用同步方法。
希望这可以帮助您更好地理解它。
干杯!