ThinkInLinux 2008-11-07 22:08
浏览 1365
已采纳

莫名其秒的synchronized

下面这段代码的方法前加了个同步,有必要吗?查了一下原来的书籍,也有在前面加同步的,
我认为这实在是多此一举,根本不需要的,大家快来谈谈
public class Conn {

public static synchronized Connection get() throws Exception {

Context ctx = new InitialContext();

Context envctx = (Context) ctx.lookup("java:comp/env");

DataSource ds = (DataSource) envctx.lookup("jdbc/TestDB");

return ds.getConnection();

}

}

  • 写回答

4条回答 默认 最新

  • iteye_14081 2008-11-07 22:27
    关注

    你那样用当然是多余的,全部是局部变量。但是我们一般都不会那样用,频繁查找jndi会极大的降低效率。我们一般可能会如下使用:
    [code="java"]
    private static Context ctx;
    private static Context envctx;
    private static DataSource ds;

    public static synchronized Connection get() throws Exception {
        if (envctx == null) {
            ctx = new InitialContext();
        }
        if (envctx == null) {
            envctx = (Context) ctx.lookup("java:comp/env");
        }
        if (ds == null) {
            ds = (DataSource) envctx.lookup("jdbc/TestDB");
        }
        return ds.getConnection();
    }
    

    [/code]

    这时候就有必要了,因为有了共享变量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 怎么获取下面的: glove_word2id.json和 glove_numpy.npy 这两个文件
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug