我在我的日志记录类中定义了一个静态对象,其行如下:
class myLoggingClass {
static java.util.Properties properties;
...
...
}
Run Code Online (Sandbox Code Playgroud)
根据我的参考书,这意味着属性对象由我的类的所有实例共享.
我觉得这个定义不够.我正在编写一个在我们项目的每个应用程序中多次调用的类.
此外,我们的项目使用在同一个tomcat容器中运行的多个Web服务.每个Web服务可能有多个线程.
在主机上运行的Java虚拟机还可以运行一个或多个Web服务客户端应用程序,这些应用程序在tomcat外部运行.
因此,通过这个定义,我可能让tomcat运行带有线程的多个Web服务,每个线程都有几个对象,这些对象可能包含我的类的实例.
也可能有一个或两个Web客户端在tomcat之外运行,但在同一个JVM中.将所有的我的课分享这些实例的相同属性对象?这将使其成为JVM范围的.
如果静态对象不是 JVM范围的,那么有人知道每个对象存在的级别吗?每个tomcat容器一个?每个Web服务一个,每个独立Web服务客户端应用程序一个?
原因是:当我更新我的属性时,我从java.util.Properties获得了java.lang.ConcurrentUpdateException.
我正在使用静态布尔变量来在我的类更新时"锁定"属性对象,但这并不能防止异常发生.
这让我相信我的类中使用的静态对象可能与java.util.Properties中使用的静态对象没有相同的范围级别......但这只是猜测.
谢谢你的帮助.