Class DBConnect{ //用于创建数据库连接
   public Connection getConn(){
      Sychonize(DBConnect.class){
        //获得数据库联接
         return ...;
      }
      ......
   }
}Sychonize(DBConnect.class)有什么作用么?DBConnect.class我只能能得到DBConnect载入虚拟机后的class句柄,一般用这个可以得到DBConnect的方法、构造函数等等,我只会这么用,放在Sychonize里有什么用处么?难道可以防止用户并发访问?

解决方案 »

  1.   

    是不是当前只能有一个用户拿到DBConnect的句柄,如果换成Sychonize(this.getClass())也一样吧???如果一个用户在创建DBConnect同时,另外一个用户new DBConnect的话就会处于阻塞状态么?new DBConnect和DBConnect.class.newInstance()一样么?
      

  2.   

    并不是说只有一个用户可以获得这个句柄。而是说,如果有多个实例对这个方法同时进行访问时,只有一个可以进行,其他的处于阻塞状态。所谓同步。另外,忍不下去了,是Sychornize!还有,麻烦你问以前看看API,getClass是干什么的??至于你最后一个问题,是否一样,要看具体实现了。最后,忠告一句,请使用术语,不要使用白话文。
      

  3.   

           pnlTable.add(pnlTableT, java.awt.BorderLayout.CENTER);
            pnlTable.add(pnlTableB, java.awt.BorderLayout.SOUTH);
            pnlTableT.setLayout(borderLayout6);
            pnlTableT.add(splTable, java.awt.BorderLayout.CENTER);
            pnlTableB.setLayout(borderLayout7);
            pnlTableB.add(tabHeadB,java.awt.BorderLayout.NORTH);
            pnlTableB.add(scrTableB, java.awt.BorderLayout.CENTER);
            scrTableB.getViewport().add(tabB);
            splTable.setResizeWeight(0.5);
            splTable.setDividerSize(2);
            scrTableR.getViewport().add(tabR);
            scrTableL.getViewport().add(tabL);
            splTable.add(pnlScrTL, JSplitPane.LEFT);
            splTable.add(pnlScrTR, JSplitPane.RIGHT);
            pnlScrTR.add(scrTableR,java.awt.BorderLayout.CENTER);
            pnlScrTR.add(tabHeadR,java.awt.BorderLayout.NORTH);
            pnlScrTL.add(scrTableL,java.awt.BorderLayout.CENTER);
            pnlScrTL.add(tabHeadL,java.awt.BorderLayout.NORTH);
      

  4.   

    new   DBConnect和DBConnect.class.newInstance()一样么?
    =====================================================
    产品应该是一样的 只是加工方式不一样 前者是手工作坊 后者是机器代工(类似于Factory Method)
      

  5.   

    进一步问下,为什么Synchronized(DBConnect.class)就能保证只有一个实例调用该方法?
    Class c1=DBConnect.class;
    Class c2=DBConnect.class;
    那么c1和c2是不是一样?
      

  6.   

    严格意义上说,两者完全不同,但是使用起来一样。就好比你和我做的饭肯定千差万别,但是都能吃。说的直白一点,就是==和equals的区别。
    那个关键字是同步和加锁两重意思,也就是说,同一时间内,只有一个可以访问。
      

  7.   

    Synchronized(DBConnect.class)
    因为它保证了 只有一个线程访问DBConnect.class的对象,而一下的代码只会有一个线程去访问。
    楼主给的代码,我理解作者的意思是, 数据库连接类在应用中线程保护,也就是说只有应用中只允许已有一个功能连数据库,而其他功能想要在同一时刻连数据库就只能等上一个连完才能连上,可能是想保证数据库的时效性。 如有不足请指正。
      

  8.   

    这里并不是为了时效性而试用Synchronized,是因为同时对数据库连接的操作,只能有一个。主要是为了避免多个进程同时操作一个连接,发生互斥操作,触发异常。
      

  9.   

    大家都没明白我的问题啊,我知道Synchronized(DBConnect.class)是干什么用的,但是我不知道为什么括号里应该是DBConnect.class?为什么括号里是DBConnect.class就能实现只有一个实例访问该方法?Synchronized(this),Synchronized(this.getClass())这些方式都不行么? 
      

  10.   

    Synchronized(DBConnect.class)是锁哪里的
    Synchronized(this)是锁哪里的
    这两个应该先搞清楚DBConnect.class是指这个class
    this是指这一个实例
      

  11.   

    你在创建时锁了这个class,表示不能并发创建
    单例时,只能创建一个实例,这是不同的
    不过一般用单例模式都会写上这一段,以避免并发创建实例的吧