单例就是保证始终只有一个实例。确保对象的唯一性,如Windows的任务管理器,打印控制器,数据库连接池等。实现单例注意点:
(1)构造器私有,外部无法创建实例;
(2)因此需要提供公有的方法来获取实例getInstance();
(3)静态类私有成员变量,保证只有一个变量引用。
单例模式的两种实现形式:
- 懒汉式:在第一次获取实例时才创建对象。
如果在获取实例前线程A暂停了,此时线程B获取实例并创建了对象并返回了,然后线程A恢复,又创建了一个对象,不能保证单例,因此需要为getInstance()方法加上synchronized关键字保证线程同步。
1 | //懒汉模式 |
//饿汉模式
public class ConnectionPoolB {
private static ConnectionPoolB cp = new ConnectionPoolB();
private ConnectionPoolB() {}
public static ConnectionPoolB getInstance() {
return cp;
}
}
1 | ``` |