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

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

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

一提到线程安全大家首先想到的是加锁,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方法中返回私有静态内部类的类属性, 实现懒加载

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容