单例设计模式 数据库连接实际应用

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

public class DBConnection{
 private DBConnection{}
/** 
*数据库链接
*/
private volatile static Connection conn=null;

public static Connection getConnection(){
 if(conn==null){
   synchronized (PMSServerContext.class) {
   if(conn == null)
      conn = DBConnection.getImplementation().getConnection();
   }
 }
}
}


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

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

猜你喜欢

转载自healthandbeauty.iteye.com/blog/1046765