java单例模式

文章目录

    • 单例模式
      • 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、懒汉式和饿汉式区别

java单例模式_第1张图片

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、频繁访问数据库或文件的对象。

你可能感兴趣的:(Java,java,单例模式)