两种:懒汉式和饿汉式
设计模式:一种思路
设计模式一共有23种我们学过3种:单例装饰 模板
单例解决的问题是:在内存中只存在一个对象(相当于共享文件)
有两种是实现方式:
懒汉式(延后创建对象)饿汉式(提前创建对象)
我的代码(两种放到一个文件中)
class SingleDemoPractise1
{
publicstatic void main(String[] args)
{
Person1p1 = Person1.getInstance();
Person2p2 = Person2.getInstance();
}
}
class Person1 //懒汉式
{
privatestatic Person1 p = null;
privatePerson1(){}
publicstatic Person1 getInstance()
{
if(p == null)
p= new Person1() ;
returnp;
}
}
class Person2 //饿汉式
{
privatestatic Person2 p = new Person2();
privatePerson2(){}
publicstatic Person2 getInstance()
{
returnp ;
}
}
注意:
使用懒汉式的时候容易出现同步的安全问题
问题出现在if(p==null)这句判断后
如果有多于一个的线程执行完了这句话挂起
则会在内存中创建多个对象与单例设计的初衷不符
因此使用同步技术来改善
具体方法就是使用synchronized 锁
class Person1 //懒汉式
{
privatestatic Person1 p = null;
privatePerson1(){}
publicstatic Person1 getInstance()
{
If(p== null)
{
Synchronized(Person.class)//这里的锁是字节码文件 字节码文件本身也是对象//所以可以充当这个角色
{
if (p == null)
p = new Person1() ;
}
return p;
}
}
}
这是一种提高效率的锁原理是:判断锁比判断空要花时间
当第三个甚至更后面的线程要进来的时候就只判断空 不判断锁了