我有一个静态的 final 属性存储 a DataSource
,可以由多个线程访问。这DataSource
是在 Tomcat 启动时设置的。
我应该同步访问这个DataSource
吗?我担心的是,DataSource
一个线程可能会更改内部状态,而另一个线程看不到。
我仍然不清楚是否可以在不同步的情况下访问“只读”静态字段,或者在任何情况下它是否是强制性的。
我在这个答案中读到,也许只有初始化属性的方法需要同步,所以我的代码就可以了:
public static final DataSource myDataSource;
static {
InitialContext context = new InitialContext();
myDataSource = (DataSource) context.lookup("jdbc/DataSource");
}
但是真的可以吗?在性能方面做到这一点的最佳方法是什么?