莫名其秒的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();

}

}

你那样用当然是多余的,全部是局部变量。但是我们一般都不会那样用,频繁查找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]

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

我觉得楼主使用JNDI方式访问的对象应该是数据池之类的,比如Sun Application Server中的数据池。
Sun Application Server的数据池应该是会做许多线程安全方面的控制,所以synchronized有些些多余。

同步应该是相对于共享变量来讲的, 这里一个共享的都没有, 我觉得完全是多余的!而且这样还会降低程序的运行效率.

完全多余,方法中[color=red]没有对任何共享变量进行操作[/color],没有任何同步的必要