首页 > 数据库 >mybatis_13_SqlSessionFactory的DCL单例模式

mybatis_13_SqlSessionFactory的DCL单例模式

时间:2022-08-30 17:14:29浏览次数:79  
标签:13 sqlSessionFactory synchronized DCL SqlSessionFactory 线程 SqlSessionFactorySing

SqlSessionFactory的DCL单例模式

 

public class SqlSessionFactorySingleton {
    private SqlSessionFactorySingleton(){

    }
    /**
     * volatile关键字在此处的作用是:
     * 1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值;
     * 2.顺序一致性:禁止指令重排序
     */
    private static volatile SqlSessionFactory sqlSessionFactory = null;
    public static SqlSessionFactory getInstance() throws IOException {
        //双检锁/双重校验锁 DCL(double-checked locking)
        if(sqlSessionFactory == null){
            /**
            synchronized关键字是一种同步锁,当一个线程访问对象中的synchronized同步代码块时,
             其他试图访问该对象的线程将被阻塞
             */
            synchronized (SqlSessionFactorySingleton.class){
                if(sqlSessionFactory == null){
                    String resource = "mybatis-config2.xml";
                    InputStream inputStream = Resources.getResourceAsStream(resource);
                    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                    
                }
            }
        }
        return sqlSessionFactory;
    }
}

  创建SqlSessionFactory实例:

SqlSessionFactory sqlSessionFactory = SqlSessionFactorySingleton.getInstance();

 

标签:13,sqlSessionFactory,synchronized,DCL,SqlSessionFactory,线程,SqlSessionFactorySing
From: https://www.cnblogs.com/woniu123/p/16640050.html

相关文章

  • 自己玩KAFKA 版本 kafka_2.13-3.2.1
       好久没有研究Kafka了,重新摸起来自己在虚机中 、环境JDK8+kafka_2.13-3.2.1不太建议使用Windows,除非迫不得已,毕竟Kafka的使用场景都是高并发场景,Windows服务......
  • P4513 小白逛公园
    求动态区间最大子段和,并支持单点修改。\(n\leq5\times10^5,m\leq10^5\)。用线段树处理。对于每一个节点维护以下变量:\(ans\)表示区间内最大子段和,\(sum\)表示区间......
  • Educational Codeforces Round 133 (Rated for Div. 2) ABD
    A.2-3Moves题意:从0,每次+2-2+3-3选一个,问多少次能到n由于对称性,先让n=abs(n)0只用0次,1只用1次t=n/3;如果n%3==1,说明t-1次+3,再来一次+2,就......
  • 11-12-13-14-15-16-17-18-19-20-21-22-23-24-25不知道在干啥,忘了
    时间过的好快啊,已经过去了2个星期了!!!! 而我不知道都干了什么,距离玩游戏已经过去了俩星期了,不可思议,我觉得才完了三五天而已人脑子会欺骗自己的啊我想换个键盘,换个按键轻......
  • Linux基础知识(13)- Docker (六) | 使用 Docker 安装常用应用程序
    本文演示使用Docker安装Ubuntu、CentOS、Nginx、Apache、Tomcat、Redis、MariaDB(MySQL)、Python、PHP和NodeJS。1.安装Ubuntu   Ubuntu是基于Debian的Li......
  • 13模块化编程
    1<!doctypehtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"6content="width=device-width,user-sca......
  • Educational Codeforces Round 134 (Rated for Div. 2)
    比赛链接:https://codeforces.com/contest/1721D.MaximumAND题意:给定两个序列\(a\)和\(b\),可以调整\(b\)中元素的位置,得到序列\(c\),满足\(c_i=a_i\)xor\(b......
  • 0013-wasm-hello world
    环境Time2022-05-12Rust1.60.0Node12.22.5wasm-pack0.10.2前言说明环境配置参考:https://rustwasm.github.io/docs/book/game-of-life/setup.html参考:https:/......
  • SQL Server 附加数据库时报1813错误的解决方案
    无法打开新数据库'ASR'。CREATEDATABASE中止。文件激活失败。物理文件名称'E:\SqlServer\MSSQL\Data\ASR_log.LDF'可能不正确。无法重新生成日志,原因是数据库关闭时存在......
  • 眼中体:大家眼中的IT男 (2013-12-25 16:34:50)
    当我成为一名lT男后,在父母眼中我就像黑客帝国的主角一样了不起,在亲戚眼中我是在写字楼做办公室吹空调的人,在朋友眼中我就是一个修电脑的,在同行眼里我就是一个泡网吧的,在......