finalstatic单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)
Posted 来老铁干了这碗代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了finalstatic单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)相关的知识,希望对你有一定的参考价值。
final
意思是,这个对象的值(基本类型就是值,引用类型是引用地址),不会再被改变
与线程安全的关系:final在一定程度上能使某些变量强制变得线程安全
static
意思是,这个对象是一个全局变量了,你可以在多个地方,多个线程中调用到它,而且调用的是同一个它
与线程安全的关系:一般这种的变量很容易造成线程不安全的情况
单例模式
这首先是一种特殊的需求,就是某个类的实例在JVM中只能存在一个,跟前面的static,线程安全都不一样
与线程安全的关系:实现单例需要考虑复杂的多线程的情况,这个东西需要线程安全(可以强制定义final,或使用锁,使它线程安全)
下面是单例模式的三种线程安全的实现方式
1. 在getInstance方法上加同步
public static synchronized Singleton getInstance()
if (single == null)
single = new Singleton();
return single;
2. 双重检查锁定
public static Singleton getInstance()
if (singleton == null)
synchronized (Singleton.class)
if (singleton == null)
singleton = new Singleton();
return singleton;
3. 静态内部类
public class Singleton
private static class LazyHolder
private static final Singleton INSTANCE = new Singleton();
private Singleton ()
public static final Singleton getInstance()
return LazyHolder.INSTANCE;
以上是关于finalstatic单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)的主要内容,如果未能解决你的问题,请参考以下文章