package com.xujy.thread;
public class SingleTone {
public static void main(String[] args) {
Single s1=Single.getInstance();
Single s2=Single.getInstance();
System.out.print(s1==s2);
Single1 s3=Single1.getInstance();
Single1 s4=Single1.getInstance();
System.out.print(s3==s4);
}
}
//懒汉模式(开始的时候不创建对象,调用的时候再创建实例对象),如果使用多线程的话会出现问题,可能两个线程都进入了判断语句导致
//创建了多个对象,可以采取添加同步锁的方式来保证线程安全
class Single{
private static Single single=null;//构建私有的成员类变量并赋值为null
private Single(){}//构造器私有化,不允许在其他类里创建new出该类的对象
public static Single getInstance(){//声明为public在其他类里可以调用该方法来实例化对象;static可以类名直接调用该方法来实例化对象。
if(single==null){//提高效率,第一个线程进去之后,对象不为空之后,其它线程就不会等待
synchronized (Single.class) {//效率比较低,当一个线程进去之后,其它线程依然会等待进入
if(single==null){
single=new Single();
}
}
}
return single;
}
}
//饿汉模式
class Single1{
private static Single1 s1=new Single1();//开始就创建一个对象,并且该对象是私有的
private Single1(){}//构造器私有化,不允许该类在创建对象
public static Single1 getInstance(){
return s1;
}
}