下图中1和2 书上说是加了个类锁 我想问加了类锁是干什么的?是不是就是服务器启动
后只能调用2那个方法一次啊?就是说那个sqlsessionfactory只能赋值一次啊?
还有3 为什么要返回一个sqlsessionfactory,上面2中 不是已经赋值给sqlsessionfactory了么?sqlsessionfactory是个全局对象,不需要他返回,返回sqlsessionfa
ctory没意义啊~~
根据第二个图,你这个是单例设计模式的运用,创建一个(并且只能有一个)sqlSessionFactory对象。
代码已经阐明了创建的方法,判断sqlSessionFactory是否为null,如果是,就new一个,这其实分为两个步骤。
在多线程中,如果不加以同步,可能出现第一个线程判断sqlSessionFactory为null,此时第二个线程也判断出来sqlSessionFactory为null,于是两个线程各自执行了一个new造成初始化两次。
所以必须对这段代码用synchronized做同步,CLASS_LOCK对象选择了.class对应,因为它在这个类中只有一个,是唯一的。做同步可以保证同步块内的代码被一个线程要么全部执行,要么有线程执行,直到运行完毕,别的线程才能执行。因此避免了两个线程同时执行的并发错误。
问出这个问题,就有点常识问题了,不在方法里面返回sqlsessionfactory,那你别的类怎么使用这个ssqlsessionfactory,一般不会直接点类的属性,且你这里是私有的属性。