多线程下的单例模式
来源:互联网 发布:淘宝选品数据分析 编辑:程序博客网 时间:2024/06/09 19:18
在所有的设计模式中,单例模式是我们在项目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?这篇文章主要讨论,多线程保证单例模式的线程安全。
饿汉式单例
使用饿汉式的单例,是指在方法调用前,实例就已经创建好了。在多线程下是安全的。代码如下:
public class MySingleton { private static MySingleton instance = new MySingleton(); private MySingleton() { } public static MySingleton getInstance() { return instance; }}
线程安全的懒汉式单例
懒汉式单例是指在方法调用获取实例时才创建实例,因为相对饿汉式显得“不急迫”,所以被叫做“懒汉模式”。
在使用synchronized的情况下,懒汉式单例是线程安全的。代码如下:
public class MySingleton { private static MySingleton instance = null; private MySingleton() { } public static synchronized MySingleton getInstance() { if (instance == null) {// 懒汉式 instance = new MySingleton(); } return instance; }}
Double Check Locking 双检查锁机制(推荐)
为了达到线程安全,又能提高代码执行效率,我们这里可以采用DCL的双检查锁机制来完成,代码实现如下:
public class MySingleton { private static MySingleton instance = null; private MySingleton() { } public static MySingleton getInstance() { if (instance == null) {// 第一次检查 synchronized (MySingleton.class) { if (instance == null) {// 二次检查 instance = new MySingleton(); } } } return instance; }}
使用内部类的方式
DCL解决了多线程并发下的线程安全问题,其实使用其他方式也可以达到同样的效果,代码实现如下:
public class MySingleton { private static class MySingletonHandler {// 内部类 private static MySingleton instance = new MySingleton(); } private MySingleton() { } public static MySingleton getInstance() { // 获取单例 return MySingletonHandler.instance; }}
1 0
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- 多线程下的C++ 单例模式
- 多线程下的单例模式
- 多线程下的单例模式
- Java 多线程下的单例模式
- 多线程下的单例设计模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- 多线程下的单例模式
- 多线程下的单例模式
- 多线程下的单例模式
- Java 多线程下的单例模式
- 多线程并发下的单例模式
- 多线程下的单例模式
- PHP中include()与require()的区别
- Asp.Net Core 连接MySQL
- POJ 2313
- 计算几何 基础知识~具体的图像解决方案前导知识
- acm威佐夫博弈(裸题代码)
- 多线程下的单例模式
- 求fibonacci数列前五十个数或者求出前50个数中的某个数的fibonacci数
- 1011: "水仙花数"问题2
- 【Java集合类源码分析】ArrayList源码分析
- 内存栅栏:软件高手的硬件观(一)
- 26. Remove Duplicates from Sorted Array
- Oracle常用的数据字典和动态视图
- spring框架介绍
- 初学web前端-20170426