Java 饿汉式懒汉式六种方法
Posted 亮子zl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 饿汉式懒汉式六种方法相关的知识,希望对你有一定的参考价值。
六种常见形式
1 饿汉式:直接创建对象,不存在线程安全问题
直接实例化饿汉式(简洁直观)
枚举式(最简洁)
静态代码块饿汉式(适全复杂实例化)
2 懒汉式:延迟创建对象
线程不安全(适用于单线程)
线程安全(适用于多线程)
静态内部类形式(适用于多线程)
饿汉式:
/*
*饿汉式:直接实例化饿汉式(简洁直观)
*1、构造器私有化
*2、自行创建,并且用静态变量保存
*3、向外提共这个实例
*4、强调一个单例,可以用final修改
*/
public class Singleton1()
public static final Singleton1 INSTANCE = new Singleton1();
private Singleton1()
public static void main(String[] args)
Singleton1 s= Singleton1.INSTANCE;
System.out.println(s);
/*
*枚举式,表示该类型的对象是有限的几个 1.5之后
*可以限定为一个成了单例
*/
public enum Singleton1()
INSTANCE
public static void main(String[] args)
Singleton1 s= Singleton1.INSTANCE;
System.out.println(s);
/*
*静态代码块饿汉式
*
*/
public class Singleton1
public static final Singleton1 INSTANCE;
static
INSTANCE = new Singleton1();
private Singleton1()
懒汉式:
/*
*线程不安全(适用于单线程)
*可以加 synchronized 同步代码块来解决线安全问题
*/
public class Singleton1
private static Singleton1 instance;
private Singleton1()
public static Singleton1 getInstance()
if(instance == null)
try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();
instance = new Singleton1();
return instance;
public static void main()
Singleton1 s1= Singleton1.getInstance();
/*
*线程安全(适用于多线程)
*/
public class Singleton1
private static Singleton1 instance;
private Singleton1()
public static Singleton1 getInstance()
if(instance == null)
synchronized(Singleton1.class)
if(instance == null)
try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();
instance = new Singleton1();
return instance;
/*
*静态内部类形式(适用于多线程)
*内部类加载和初始代时,创建INSTANCE对象
*是单独加载和初始化getInstance,是线程安全的
*/
public class Singleton1
private Singleton1()
private static calss Inner
private static final Singleton1 INSTANCE = new Singleton1();
public static Singleton1 getInstance()
return Inner.INSTANCE;
以上是关于Java 饿汉式懒汉式六种方法的主要内容,如果未能解决你的问题,请参考以下文章
java软件设计模式——单例设计模式中的饿汉式与 懒汉式示例
Java 设计模式 -- 单例模式的实现(饿汉式枚举饿汉式懒汉式双检锁懒汉式内部类懒汉式)jdk 中用到单例模式的场景DCL实现单例需用volatile 修饰静态变量