zoukankan      html  css  js  c++  java
  • 单例模式-双重检查加锁

    (参考:http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html

    双重检查加锁:
        (1)既实现线程安全,又能够使性能不受很大的影响。那么什么是“双重检查加锁”机制呢?
       
       (2)所谓“双重检查加锁”机制,指的是:并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法后,先检查实例是否存在,如果不存在才进行下面的同步块,这是第一重检查,进入同步块过后,再次检查实例是否存在,如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,就只需要同步一次了,从而减少了多次在同步情况下进行判断所浪费的时间。    (3)“双重检查加锁”机制的实现会使用关键字volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。
       (4)由于volatile关键字可能会屏蔽掉虚拟机中一些必要的代码优化,所以运行效率并不是很高。因此一般建议,没有特别的需要,不要使用。也就是说,虽然可以使用“双重检查加锁”机制来实现线程安全的单例,但并不建议大量采用,可以根据情况来选用。
    /**
     * Project Name:DesignPatterns
     * File Name:Single.java
     * Package Name:com.louis.singlePattern
     * Date:2017年9月26日下午9:24:31
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.singlePattern;
    /**
     * ClassName:Single 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年9月26日 下午9:24:31 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Single {
        public volatile static  Single instanceSingle = null;
        
        private Single(){}
        
        public static Single getInstance(){
            //首先检查实例存不存在
            if(instanceSingle == null){
                //同步块,线程安全的创建实例
                synchronized (Single.class) {
                    //再次检查实例是否真的存在,如果不存在则真正创建实例
                    if(instanceSingle == null){
                        instanceSingle = new Single();
                    }
                }
            }
            return instanceSingle ;
        }
        
    }
  • 相关阅读:
    结队项目----第一次作业
    小学四则运算(2.0版本)
    小学算法(四则运算)
    (读书笔记)基于CMMI的软件工程及实训指导------第一章软件工程基础
    数学建模------线性规划
    初出茅庐-----微信好友分析与微信机器人
    初出茅庐----数据库的学习应用
    初出茅庐---程序测试与爬虫
    初出茅庐----体育竞技分析
    Unity使用小剧场—创建的按钮On Click()只有MonoScript怎么办
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7599073.html
Copyright © 2011-2022 走看看