Singleton pattern的线程安全问题
original post from here
方法一:同步机制关键词
public class Singleton {
2 //利用静态变量来记录Singleton的唯一实例
3 private static Singleton uniqueInstance;
4
5 /*
6 * 构造器私有化,只有Singleton类内才可以调用构造器
7 */
8 private Singleton(){
9
10 }
11
12 public static synchronized Singleton getInstance(){ //变为同步方法
13 if(uniqueInstance == null){
14 uniqueInstance = new Singleton();
15 }
16
17 return uniqueInstance;
18 }
19
20 } 方法二:
publicclass Singleton {
2 /*
3 * 利用静态变量来记录Singleton的唯一实例
4 * 直接初始化静态变量,这样就可以确保线程安全了
5 */
6 private static Singleton uniqueInstance = new Singleton(); //直接初始化静态变量。
7
8 /*
9 * 构造器私有化,只有Singleton类内才可以调用构造器
10 */
11 private Singleton(){
12
13 }
14
15 public static Singleton getInstance(){
16 return uniqueInstance;
17 } 方法三:用“双重检查加锁”,在getInstance()中减少使用同步。
public class Singleton {
2 /*
3 * 利用静态变量来记录Singleton的唯一实例
4 * volatile 关键字确保:当uniqueInstance变量被初始化成Singleton实例时,
5 * 多个线程正确地处理uniqueInstance变量
6 *
7 */
8 private volatile static Singleton uniqueInstance;
9
10 /*
11 * 构造器私有化,只有Singleton类内才可以调用构造器
12 */
13 private Singleton(){
14
15 }
16
17 /*
18 *
19 * 检查实例,如果不存在,就进入同步区域
20 */
21 public static Singleton getInstance(){
22 if(uniqueInstance == null){
23 synchronized(Singleton.class){ //进入同步区域
24 if(uniqueInstance == null){ //在检查一次,如果为null,则创建
25 uniqueInstance = new Singleton();
26 }
27 }
28 }
29
30 return uniqueInstance;
31 }
32
33 }
Singleton pattern的线程安全问题的更多相关文章
- DP #1 Singleton Pattern线程安全问题
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例. 其中涉及到最主要的问题就是在多线程并发时线程安全问题. 单例模式的实现也有一个循序渐进的过程:1.最基本要求:每次从getI ...
- singleton pattern的推荐实现
一.单例模式的C#实现: (1)使用double-checked locking的方式: public sealed class Singleton { private static volatile ...
- 【设计模式】单例模式 Singleton Pattern
通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance) 的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...
- Java 设计模式(三)-单例模式(Singleton Pattern)
1 概念定义 1.1 定义 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 1.2 类型 创建类模式 1.3 难点 1)多个虚拟机 当系统中的单例类被拷贝运行在多 ...
- Java设计模式—单例设计模式(Singleton Pattern)全然解析
转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...
- 设计模式01 创建型模式 - 单例模式(Singleton Pattern)
参考 [1] 设计模式之:创建型设计模式(6种) | 博客园 [2] 单例模式的八种写法比较 | 博客园 单例模式(Singleton Pattern) 确保一个类有且仅有一个实例,并且为客户提供一 ...
- 设计模式系列之单例模式(Singleton Pattern)——确保对象的唯一性
模式概述 模式定义 模式结构图 饿汉式单例与懒汉式单例 饿汉式单例 懒汉式单例 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 适用场景 说明:设计模式系列文章是读刘伟所著 ...
- Singleton Pattern -- 不一样的单例模式
Singleton Pattern -- 单例模式 单例模式是用来创建一个只能又一个实例的对象. 单例模式类图如下. 单例模式有两大好处: (1)对于频繁使用的对象,可以省略创建对象所话费的时间,这对 ...
- Net设计模式实例之单例模式( Singleton Pattern)
一.单例模式简介(Brief Introduction) 单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点.单例模式因为Singleton封装它的唯 ...
随机推荐
- linux 下取进程占用 cpu/内存 最高的前10个进程
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ;|head linux下获取占用内存资源最多的10个进程,可以使用如下命令组合: ;|head 命令组合解析(针对CPU的,M ...
- Python中字典的相关操作
1. Python类似于Java中的哈希表,只是两种语言表示的方式是不一样的,Python中的字典定义如下: 在Python中是一种可变的容器模型,它是通过一组键(key)值(value)对组成,这种 ...
- BZOJ 5466: [Noip2018]保卫王国 动态DP
Code: // luogu-judger-enable-o2 #include<bits/stdc++.h> #define ll long long #define lson (now ...
- linux系统下安装memcached
检查libevent 首先检查系统中是否安装了libevent rpm -qa|grep libevent 如果安装了则查看libevent的安装路径,后续安装时需要用到 rpm -ql libeve ...
- vue-cli index.js dev 配置中 assetsPublicPath 的值不能填 "./" 的问题
问题 使用nginx又代理了一层 在浏览器中 / 代表域名的根目录,./代表当前路径 线上发布的时候一般都会使用nginx反向代理,所以使用./是最靠谱的,但是vue-cli dev 中的 asset ...
- pytorch实战(7)-----卷积神经网络
一.卷积: 卷积在 pytorch 中有两种方式: [实际使用中基本都使用 nn.Conv2d() 这种形式] 一种是 torch.nn.Conv2d(), 一种是 torch.nn.function ...
- eas之获取不同类型的组织视图
OrgViewF7 orgF7=new OrgViewF7(this);orgF7.setCurrentCUID(company.getId().toString());orgF7.setMultiS ...
- Lua的五种变量类型、局部变量、全局变量、lua运算符、流程控制if语句_学习笔记02
Lua的五种变量类型.局部变量.全局变量 .lua运算符 .流程控制if语句 Lua代码的注释方式: --当行注释 --[[ 多行注释 ]]-- Lua的5种变量类型: 1.null 表示 ...
- [置顶]
tcpflow 抓包
转自: http://www.rwifeng.com/jekyll/update/2015/04/16/how-to-tcpflow/ tcpflow 抓包 Apr 16, 2015 大家都知道 t ...
- 数据结构与算法(2)- vector概念介绍
声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. Vector的出现主要是为了解决数组的静态空间的问 ...