Design Pattern(设计模式)。 单例模式(Singleton):表示一个类只会生成唯一的一个对象。
package twentyFifth;
//单例模式
public class SingletonTest {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton == singleton2);
}
}
class Singleton{
//private static Singleton singleton = new Singleton();
//始终是单例模式
private static Singleton singleton;
private Singleton(){
}
public static Singleton getInstance() {
if(singleton == null) {
singleton = new Singleton();
}
//多线程时不是单例模式
return singleton;
}
}
结果是:
true
多线程的单例模式所出现的问题模拟
对于单例模式(Singleton) 来说,如果在 getInstance()方法中生成 Singleton 实例则可能会产生同步问题,即可能会生成两个不同的对象。
package JavaBase.network;
public class Singleton {
private static Singleton singleton = null;
private Singleton(){
}
public static Singleton getInstance() {
if (null == singleton) {
try {
Thread.sleep((long)(Math.random() * 4000));
} catch (InterruptedException e) {
e.printStackTrace();
}
singleton = new Singleton();
}
return singleton;
}
public static void main(String[] args) {
new MyThread().start();
new MyThread().start();
}
}
class MyThread extends Thread{
@Override
public void run() {
System.out.println(Singleton.getInstance());
}
}
结果是:
JavaBase.network.Singleton@54692ed3
JavaBase.network.Singleton@5f1696c1