线程安全的单例模式最优实现

2019-05-28  本文已影响0人  geekofo

说起设计模式, 应该是面试中最长被问到的知识点, 通常最先能想到的非单例模式莫属!

单例模式从线程角度来讲一般分为两大类: 线程安全单例模式与非线性安全单例模式

一提到线程安全大家首先想到的是加锁,synchronized!!!, 然鹅, 加锁毕竟比不加锁要更多消耗系统资源, 下面介绍一种不需要加锁,且可以实现懒加载的线程安全单例模式, 啥也不说, 直接上代码!

import java.util.Arrays;

public class Singleton {

private Singleton() {

System.out.println("single");

}

private static class Inner {

private static final Singleton s = new Singleton();

}

public static Singleton getSingle() {

return Inner.s;

}

public static void main(String[] args) {

Thread[] ths = new Thread[200];

for(int i=0; i<ths.length; i++) {

ths[i] = new Thread(()->{

Singleton.getSingle();

});

}

Arrays.asList(ths).forEach(o->o.start());

}

}

1, 将构造方法设置为私有, 防止被new

2, 创建私有静态内部类, 内部类中定义该单例的静态对象

3, 在get方法中返回私有静态内部类的类属性, 实现懒加载

上一篇下一篇

猜你喜欢

热点阅读