下面这段代码的方法前加了个同步,有必要吗?查了一下原来的书籍,也有在前面加同步的,
我认为这实在是多此一举,根本不需要的,大家快来谈谈
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],没有任何同步的必要