13-1 面向对象 设计模式1 单例设计模式

来源:互联网 发布:suse linux 安装mysql 编辑:程序博客网 时间:2024/06/05 11:37

两种:懒汉式和饿汉式

 

设计模式:一种思路

设计模式一共有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;

}

         }

}

这是一种提高效率的锁原理是:判断锁比判断空要花时间

当第三个甚至更后面的线程要进来的时候就只判断空 不判断锁了

 

 

 

0 0
原创粉丝点击