为了解决数据库连接池多线高并发的问题 特应用单例高并发 处理代码如下
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实例化成功,其他线程便立即发现。
分享到:
相关推荐
wiki百科:单例模式,也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 二、...
1.设计模式 (1)单例模式(2)观察者模式(3)代理模式 2.集合应用 设计一个案例,用集合解决实际问题 3.访问数据库 设计一个案例,连接数据库,进行添加、删除、修改、查询 4.综合应用 设计一个用图形界面的数据库应用...
实际上,GoF 的设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用 和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的 Java 语言基础上跃进一步,更重要的是...
实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 条件语句 89 实例058 员工生日提醒 89 实例059 考试成绩评定标准 90 实例060 控制登录用户...
实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 条件语句 89 实例058 员工生日提醒 89 实例059 考试成绩评定标准 90 实例060 控制登录用户...
5.7.2 单例模式(Singleton Pattern) 81 5.7.3 工厂模式(Factory Pattern) 83 5.8 接口与抽象类 86 5.8.1 接口的定义 86 5.8.2 单一接口的实现 87 5.8.3 多重接口的实现 87 5.8.4 抽象类 88 5.9 小结 90 第6章 ...
5.1.2 单例设计模式(Singleton) 346 5.2 GUI层面向对象的扩展设计 351 5.2.1 层的概念 351 5.2.2 封装测试对象类 352 5.2.3 调用业务行为 355 5.2.4 对象识别结果分析 355 5.2.5 总结 356 6.1 框架设计理念 356 ...
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器...
理解控制反转最简单的方式就是看它的实际应用。在对由三部分组成的 Spring 系列 的第 1 部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC 容器注入应用程序的依赖关系(而不是将它们构建进来)。 我用...
答:单例模式是一种比较常见的设计模式,带给我们以下好处: 1:控制资源的使用 2:控制实例的产生数量 3:让多个不相关的两个线程或进程之间实现通信 为什么要用spring? 答:1、主要将各个框架有效的联系起来...
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上...