java 单例模式:饿汉式与懒汉式
2021-03-31 00:28
标签:bsp date 获取 cto 速度慢 syn jdk color thread 饿汉式单例模式:HurrySingleton.java 输出比较: 总结: 相同点: 一、二者需要保证构造私有化,并且需要提供一个公开静态方法。 二、必须自己创建实例 不同点: 一、饿汉模式不论外界是否调用了获取实例的方法,实例都已经初始化,调用方法,就是直接获取对象。 二、懒汉模式是在外界调用获取实例方法的时候,对实例进行初始化,并返回实例对象。 三、二者的获取实例方法有所不同,虽然都需要加上 public 和 static关键字,不过懒汉模式的方法还需要加上同步锁,以保证线程安全, 饿汉模式则不需要 java 单例模式:饿汉式与懒汉式 标签:bsp date 获取 cto 速度慢 syn jdk color thread 原文地址:https://www.cnblogs.com/wyk96/p/13574256.html 1 /**
2 * className SignalDemo
3 * 饿汉模式
4 * @author JAVADaKUn
5 * @date 2020/8/27
6 * @version:1.0
7 * @since:jdk:1.8
8 */
9 @Getter
10 @Setter
11 @AllArgsConstructor
12 public class SignalDemo1 {
13 private String name;
14 private Integer id;
15 //在类加载的时候就完成了初始化,加载速度慢,获取对象速度快
16 private static SignalDemo1 signalDemo = new SignalDemo1();
17
18 //构造私有
19 private SignalDemo1(){
20
21 }
22
23
24 //方法公开,因为在类加载的时候就已经初始化,所有不加同步也不会出现线程问题
25 public static SignalDemo1 getInstance(){
26 return signalDemo;
27 }
28 }
懒汉式单例模式:LazySignleton.java 1 /**
2 * className SignalDemo2
3 *
4 * @author JAVADaKun
5 * @date 2020/8/27
6 * @version:1.0
7 * @since:jdk:1.8
8 */
9 @Getter
10 @Setter
11 @AllArgsConstructor
12 public class SignalDemo2 {
13 private String name;
14 private Integer id;
15 //在类加载的时候,不创建实例,因此类加载速度较快,获取对象速度较慢
16 private static SignalDemo2 signalDemo = null;
17
18 //构造私有
19 private SignalDemo2(){
20
21 }
22
23 //需要加上同步锁,以保证线程安全,因为类变量在加载的时候,没有初始化
24 public synchronized static SignalDemo2 getInstance(){
25 if(signalDemo==null){
26 signalDemo=new SignalDemo2();
27 }
28 return signalDemo;
29 }
30 }
1 public class SignalTest {
2 public static void main(String[] args) {
3
4 System.out.println("1 "+ SignalDemo1.getInstance());
5 //1 signal.SignalDemo1@1540e19d
6
7 new Thread(()->{
8 System.out.println("2 "+ SignalDemo1.getInstance());
9 }).start();
10 //2 signal.SignalDemo1@1540e19d
11
12 System.out.println("3 "+SignalDemo2.getInstance());
13 //3 signal.SignalDemo2@214c265e
14
15 new Thread(()->{
16 System.out.println("4 "+SignalDemo2.getInstance());
17 }).start();
18 //4 signal.SignalDemo2@214c265e
19
20 }
21 }
上一篇:Java多线程