(加50分)DAO抽象工厂与线程同步

来源:百度知道 编辑:UC知道 时间:2024/07/01 04:14:01
谁能帮小弟解释一下下面这个.java文件,我看DAO看到这里就开始不明白了,请教各位。解释最好详细一点,谢谢!

DAOFactory.java
package login3.db.factory;

import login3.db.DAOInterface.UserDAO;
import login3.db.kingdao.factory.DAOFactory_kingdao;

public abstract class DAOFactory {

private static Object initLock = new Object(); //这个线程锁是什么意思?

private static DAOFactory factory = null; //为什么要将本类的实例作为私有属性呢?

public static DAOFactory getInstance() {
if (factory == null) {
synchronized (initLock) { //这行是什么意思?
if (factory == null) {
try {

factory = new DAOFactory_kingdao(); //为什么要new一个DAOFactory_kingdao()方法?

} catch

private static Object initLock = new Object(); //这个线程锁是什么意思?

这里只是定义一个对象,没有任何具体意义定义他目的只是在下面使用
synchronized (initLock)
的时候在括号内放一个对象,在你进行多线程调用的时候虚拟机会自动去检查这个对象是否被锁住了,从而决定该线程是否进入等待状态

factory = new DAOFactory_kingdao(); //为什么要new一个DAOFactory_kingdao()方法?
关于这个楼上说了一下,我认为DAOFactory_kingdao是继承了DAOFactory 的一个类,DAOFactory_kingdao() 是这个类的构造方法,为了实类化该类就需要new一下,至于为什么子类对象为什么能交给父类的变量,你去查下多态就应该了解了

不知道。

不过我想知道
private static Object initLock = new Object();
这个东东为什么这样写呢?

private static DAOFactory factory = null;
这个这样定是没有错了,单例嘛。下面有个getInstance() 的方法。

synchronized
线程同步,也就是说,在你调用这个东东的时候不会被别人改,因为initLock是静态的。所以可以被别人改。听说1.6换新方法了,不知道是不是真的。

factory = new DAOFactory_kingdao();
估计DAOFactory_kingdao()是DAOFactory的子类,否则不能实例化,