黑马程序员———设计模式之——单例设计模式

---------------------- android培训、java培训、期待与您交流! ----------------------

 

设计模式:

 1.     单例设计模式的作用:

         解决一个类在内存只存在一个对象。

 2.     单例设计模式的存在的原因:

         为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。

         为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。

         为了方便其它程序对自定义对象的访问,可以对外提供一些访问方法。

 3.    单例设计模式的实现方法:

           具体代码实现:

           将构造函数私有化

           在类中创建一个本类对象。

           提供一个方法可以获取到该对象。

3.     单例设计模式的实际应用:

      

为了解决数据库连接池多线高并发的问题 特应用单例高并发 处理代码如下

Java代码
     public class DBConnection{   
  1.  private DBConnection{}   
  2. /**   
  3. *数据库链接  
  4. */  
  5. private volatile static Connection conn=null;   
  6.   
  7. public static Connection getConnection(){   
  8.  if(conn==null){   
  9.    synchronized (PMSServerContext.class) {   
  10.    if(conn == null)   
  11.       conn = DBConnection.getImplementation().getConnection();   
  12.    }   
  13.  }   
  14. }   
  15. }  

在getConnection()的方法中首先判断实例是否被创建,如果没有被创建,首先使用同步代码块 synchronized,在同步代码块里面我们还要再次判断实例是否被创建。这是因为如果第二次没有检查,线程同时进入方法体他们都检测conn为null,不管哪个线程先占据同步锁创建实例对象,都不会影响例外一个线程创建实例对象,所以我们在同步代码块中第二次判读该对象是否已经被创建。

第二属性conn是被volatile修饰的,因为它具有 synchronized的可见性特点,也就是说线程能够自动发现volatile的最新值。这样,如果conn实例化成功,其他线程便立即发现。

 

单例设计模式补充

   单例的别一种实现方式,通过枚举实现, 前提:

   该枚举中有且只有一个实例对象。

 

---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

 

你可能感兴趣的:(heima,设计模式,数据库连接池,null,android,java,数据库)