0

我的 Weblogic 门户应用程序中有以下代码:

public class RoutesProgressListener implements ProgressListener {

private static long bytesTransferred = 0;
private static long fileSize = -100;

在上面的类bytesTransferredfileSize变量中都是静态的。这些变量可能会导致什么问题?

4

2 回答 2

1

首先,由于这些变量是静态的,它们与类相关联,而不是与对象相关联。因此,它们是按定义共享的。

其次,这是什么类型的听众?如果它是 a HttpSessionListener,则它是应用程序范围的。因此,即使您将这些变量设为非静态变量,它们也将被所有用户共享。

于 2013-03-12T21:05:44.893 回答
0

这段代码的主要问题是您将这些变量定义为静态的,这意味着两件事:

  1. 在单个 JVM 中只会创建bytesTransferred和的一个实例。fileSize
  2. 所有线程将共享这些值。

像 Weblogic 这样的 Java EE 容器是一个多线程环境,因此只要您有多个活动连接,就会遇到问题。

尝试将这些更改为实例(非静态)变量,并为每个请求实例化一个新的 ProgressListener。

于 2013-03-13T12:32:08.790 回答