小编Sco*_* C.的帖子

Java中静态类变量的范围

我在我的日志记录类中定义了一个静态对象,其行如下:

   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中使用的静态对象没有相同的范围级别......但这只是猜测.

谢谢你的帮助.

java scope static-members

12
推荐指数
3
解决办法
7246
查看次数

标签 统计

java ×1

scope ×1

static-members ×1