文章目录
- 单例模式
- 3、懒汉式 - 懒汉式非线程安全
- 4、饿汉式 - 线程安全
- 5、懒汉式和饿汉式区别
- 6、双重检查锁定
- 7、应用场景
来讲讲java单例
单例模式
java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、双重检查锁定
1、单例模式有以下特点:
a、单例类只能有一个实例。
b、单例类必须自己创建自己的唯一实例。
c、单例类必须给所有其他对象提供这一实例。
2、代码特点
a、私有静态变量
b、私有构造方法
c、公有的静态访问方法
3、懒汉式 - 懒汉式非线程安全
public class Singleton {private Singleton() {}private static Singleton single=null;//静态工厂方法 public static Singleton getInstance() {if (single == null) { single = new Singleton();} return single;}
}
4、饿汉式 - 线程安全
//饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 {private Singleton1() {}private static final Singleton1 single = new Singleton1();//静态工厂方法 public static Singleton1 getInstance() {return single;}}
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。
5、懒汉式和饿汉式区别
6、双重检查锁定
public static Singleton getInstance() {if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; }
7、应用场景
a、需要频繁创建的一些类,使用单例可以降低系统的内存压力,减少 GC。
a、某类只要求生成一个对象的时候,如一个班中的班长等。
b、某些类创建实例时占用资源较多,或实例化耗时较长,且经常使用。
c、某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池、网络连接池等。
e、频繁访问数据库或文件的对象。