事情的由来:
我在项目中使用了ibatis,获得SqlMapClient需要读取xml文件,考虑到效率问题,一直在这个问题上比较纠结
1.弄个类,是实例的?,类似:public class SqlMapClientOwer {
public SqlMapClient getSqlMapClient(){
 SqlMapClient smc=null;
 try {
Reader reader=Resources.getResourceAsReader("ibatis/SqlMapConfig.xml");
smc=SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException e) {
smc=null;
e.printStackTrace();
}
 return smc;
}
}我的考虑是:这样降低效率,因为我感觉,一万个用户访问,得生成一万个SqlMapClientOwer 实例,也就是说得读1万遍
2.弄成这样:public class SqlMapClientOwer {
public static SqlMapClient smc;
static {
try {
Reader reader = Resources
.getResourceAsReader("ibatis/SqlMapConfig.xml");
smc = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException e) {
smc = null;
e.printStackTrace();
}
}
}问题来了,SqlMapClient的smc不管来访用户多少,都只运行一次静态块,但是smc支持多个用户同时访问吗?
不支持的话应该怎么办呢?

解决方案 »

  1.   

    支持,但是由于只有一个smc,所以多个用户同时操作可能会造成混乱,当然如果对smc只是读取数据而不做任何变更的话是没有问题的
      

  2.   

    synchronised  来要求同步吧!要不然会很混乱的
      

  3.   

    不用去同步,反正xml里的内容你也不像去改的
    要是改的话
    就重启服务器之后再改的嘛所以自然来一百万个也都是读取
    随便他们怎么读
    内容都是一致的了
      

  4.   

    建议lz参考一下單例模式。
    如果使用框架的话,用Spring管理实现就可以。
      

  5.   

    http://zh.wikipedia.org/wiki/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F