单例模式是JAVA设计模式中的一种,通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。显然单例模式的要点有三个:
一、某个类只能有一个实例;
二、它必须自行创建这个实例;
三、它必须自行向整个系统提供这个实例
单例作用:
第一、控制资源的使用,通过线程同步来控制资源的并发访问;
第二、控制实例产生的数量,达到节约资源的目的。
第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
比如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源。
创建单例模式主要有两种方法懒汉式、饿汉式。
懒汉式:
public class Singleton
{
private Singleton(){};
private static Singleton single=null;
public static Singleton getInstance(){
if(single==null){
return new Singleton();
}
return Single;
}
}
1.在getInstance方法上加synchronized 同步函数;
2.双重检查锁定
- public static Singleton getInstance() {
- if (singleton == null) {
- synchronized (Singleton.class) {
- if (singleton == null) {
- singleton = new Singleton();
- }
- }
- }
- return singleton;
- }
- public class Singleton {
- private static class LazyHolder {
- private static final Singleton INSTANCE = new Singleton();
- }
- private Singleton (){}
- public static final Singleton getInstance() {
- return LazyHolder.INSTANCE;
- }
- }
public class Singleton{
private Singleton(){};
private static final Singleton single=new Singleton();
public static Singleton getInstance(){
return single;
}
}
由于饿汉式是线程安全的,所以不需要进行线程安全操作。