Java多线程--单例模式

一、饿汉模式

类加载的同时,创建实例

java 复制代码
class Singleton{
    private static Singleton instance new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}

二、懒汉模式-单线程版

类加载的时候不创建实例,第一次使用的时候才创建实例

java 复制代码
class Singleton{
    private static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

三、懒汉模式-多线程版

上面的懒汉模式的实现是不安全的

加上synchronized可以改善这里的线程安全问题

java 复制代码
class Singleton{
    private static Singleton instance = null;
    private Singleton(){}
    public synchronized static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

四、懒汉模式-多线程版(改进)

  • 以下代码在加锁的基础上,做出了进一步的改动
  • 给instance加上volatile
java 复制代码
class Singleton{
    private static volatile Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance == null){
            synchronized(Singleton.calss){
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
相关推荐
老蒋每日coding几秒前
Java解析Excel并对特定内容做解析成功与否的颜色标记
java·开发语言·excel
lang201509281 分钟前
Java反射利器:Apache Commons BeanUtils详解
java·开发语言·apache
m0_748245922 分钟前
SQLite 数据类型概述
java·数据库·sqlite
沐知全栈开发2 分钟前
HTML DOM 方法
开发语言
扶苏10024 分钟前
前端js高频面试点汇总
开发语言·前端·javascript
项目題供诗4 分钟前
C语言基础(五)
c语言·开发语言
Mh_ithrha8 分钟前
题目:小鱼比可爱(java)
java·开发语言·算法
l1t10 分钟前
数独优化求解C库tdoku-lib的使用
c语言·开发语言·python·算法·数独
wxm63113 分钟前
力扣算法题(C++):1、2
java·算法·leetcode
冰暮流星14 分钟前
sql语言之where语句
java·数据库·sql