实现:
public final class MySingleton {
// 防止指令重排序. (顺序性,可见性), 保证了socket 变量先初始化,instance后赋值。
private volatile static MySingleton instance = null;
private Socket socket;
private MySingleton() {
this.socket = new Socket();
}
public static MySingleton getInstance() {
if (null == instance) {
// 2个线程同时访问时, 只有一个线程可以获取到锁。
synchronized (MySingleton.class) {
// 如果不添加判断, 那么第二个线程又重新实例化了一遍,浪费了。
if (null == instance) {
// 注意volatile顺序性。
instance = new MySingleton();
}
}
}
return instance;
}
}
网友评论