-
如何维护一个单例对象?3
在java web系统中,我想在系统启动时创建100个数据库连接,这100个连接放在vector中,public static ConnPool getCP() { if (cp == null) { return new ConnPool(); } else { return cp; } }
但系统启动和访问数据库时会调用上面的方法,系统启动时cp==null,但访问数据库时cp也为null,我想是不是因为cp被jvm回收了.
我应该怎样保证ConnPool在系统启动被实例化一次,其它访问数据库时仍然用这个实例,不用在new ConnPoll
问题补充:
ConnPool 如何保持在web系统中只有一个实例呢?
为什么每次getCP时,都会new ConnPool(); ?2008年12月26日 20:30
5个答案 按时间排序 按投票排序
-
引用
引用
为什么数据库连接不使用别人已经做好的DBCP, C3PO等东西呢, 自己做很多麻烦:)这个比较关键的, 不要什么都自己做。
sdh5724 (中级程序员) 2008-12-27
从原理上搞清楚没有有百利而无一害。
给这块的原理全讲明白了我估计得有个3,4年的经验的人,还得是深入透彻的研究过apach等等的高人。另外如果要在这里打字,还没有源码的情况下我估计怎么也得敲个几年。。。
我才疏学浅,一时手欠。。。。。当我没说2009年1月09日 00:14
-
引用为什么数据库连接不使用别人已经做好的DBCP, C3PO等东西呢, 自己做很多麻烦:)这个比较关键的, 不要什么都自己做。
sdh5724 (中级程序员) 2008-12-27
从原理上搞清楚没有有百利而无一害。2008年12月28日 00:26
-
在Web中,将这个单例放在ContextListener中初始化,然后放入Attribute中,然后在任何地方去得ConnPool实例。在其他地方做,将会导致失效。主要是生命周期的问题。
2008年12月27日 13:59
-
public class ConnPool{ private static ConnPool instance=new ConnPool();//eager loading private List<Connection> conns=null; private ConnPool(){ conns=new Vector<Connection>(100); ... } public static synchronized ConnPool getInstance(){ if (instance==null){ return new ConnPool(); } return instance; }
单例模式用lazy loading在多线程环境下很容易出错,故用eager loading。请参考。
2008年12月26日 21:21
相关推荐
1. **数据库锁**:在创建单例对象之前,所有节点尝试获取数据库中的一个特定锁。只有第一个获取到锁的节点才能创建单例并释放锁,其他节点则等待直到锁被释放。这种方法依赖于数据库的并发控制机制,但可能会引入...
【单例模式】是一种经典的设计模式,用于确保一个类只有一个实例,并提供全局访问点。然而,单例模式在实际应用中并非总是最佳选择,因为其存在一些潜在的问题和局限性。 1. **单例对OOP特性支持不友好**: - **...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在iOS开发中,单例模式被广泛应用于管理共享资源、配置设置或者在整个应用程序生命周期内保持一致状态的对象。这个"一个单例Demo...
然而,在实际应用中,人们往往会关心这样一个问题:当单例对象长时间未被使用时,它是否会被Java虚拟机(JVM)的垃圾回收机制回收?本文将深入探讨这一问题,并基于HotSpot虚拟机的特性来分析答案。 #### 二、单例...
单例模式是指一个类只有一个实例,并且提供了一个全局的访问点来访问该实例。单例模式是一种常用的设计模式,它可以确保某个类只有一个实例,并且提供了一个全局的访问点来访问该实例。 在 Java 中,单例模式可以...
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在JavaScript中,单例模式通常用于实现全局状态管理、配置管理或实现具有单一职责的对象。 请注意,虽然单例模式在...
Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...
1. 寄生式单例:将单例实例化过程封装在一个普通对象中,通过该对象来获取单例实例。 2. 懒汉枚举:结合枚举和单例模式,保证线程安全和防止反序列化创建新实例。 总的来说,单例模式是一种常用的软件设计模式,它...
在代码实现上,我们可以创建一个名为SingletonFactory的工厂类,其中包含一个私有的单例对象和一个公共的静态方法getInstance,该方法返回单例对象。工厂类的构造器设为私有,防止外部直接实例化。单例对象的创建...
在Qml文件中,你可以使用Singleton组件来实例化并访问这个单例对象: ```qml import QtQuick 2.0 import com.example.singleton 1.0 Singleton { id: mySingleton } Text { text: mySingleton.data } ...
**饿汉式**:在类加载时就完成了初始化,所以没有线程安全问题,但是不管是否使用,都会立即创建单例对象,这可能造成资源的浪费。例如: ```java class DanLi{ private static final DanLi obj = new DanLi(); ...
工厂类会根据某些条件(如配置、环境变量等)返回一个特定的单例对象,这样既保持了单例的特性,又提供了灵活的选择机制。 在HTML开发中,虽然HTML本身不直接支持设计模式,但JavaScript作为前端开发的重要语言,...
单例模式的核心思想是确保一个类只有一个实例,并提供一个全局访问点,使得所有对象都可以通过这个全局访问点获取到这个唯一的实例。 在iOS的开发环境中,Objective-C和Swift都支持实现单例。在Objective-C中,我们...
在Scala编程语言中,单例对象(Singleton Object)是一个重要的特性,它提供了类似于Java中静态成员的功能,但具有更高级的语义和更强的类型安全。由于Scala的设计哲学,单例对象不仅作为全局唯一实例的容器,还可以...
2. 创建一个静态变量 `_instance` 来保存单例对象,并提供一个静态方法 `getInstance()` 来获取实例。 ```typescript private static _instance: SceneManager; public static getInstance(): SceneManager { if ...
- **登记式单例**:也称为注册式单例,它维护一个存储单例对象的集合,当需要实例时,首先检查集合中是否存在,存在则直接返回,不存在则创建并添加到集合中。这种方式更加灵活,可以管理一组单例对象,但实现相对...
登记式单例类通过维护一个映射表(如HashMap)来管理不同类型的单例对象。这种方式类似于框架中的依赖注入模式。 **代码示例**: ```java package pattern.singleton; import java.util.HashMap; import java....
单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类在整个程序运行期间只有一个实例存在。在Objective-C(iOS开发的主要语言)中,单例通常用来管理共享资源,比如网络连接、数据库连接或者全局...
2. **伸缩性**:由于只有一个实例,当需要扩展功能时,可以很容易地对单例对象进行修改,而不会影响到其他使用该对象的地方。 单例模式的缺点: 1. **系统开销**:虽然单例模式可以减少不必要的对象创建,但在某些...
调用`[MyClass sharedInstance]`即可获取到单例对象。 3. 避免循环引用:由于单例通常会持有其他对象,因此需要注意避免循环引用的问题。可以使用弱引用(`__weak`)来打破强引用链。 ```objc - (void)add...