0

Weblogic ポータル アプリに次のコードがあります。

public class RoutesProgressListener implements ProgressListener {

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

上記のクラスbytesTransferredfileSize変数は静的です。これらの変数はどのような問題を引き起こす可能性がありますか?

4

2 に答える 2

1

まず第一に、これらの変数は静的であるため、オブジェクトではなくクラスに関連付けられています。したがって、それらは定義上共有されます。

第二に、これはどのタイプのリスナーですか? の場合は、HttpSessionListenerアプリケーション スコープです。したがって、これらの変数を非静的にしても、それらはすべてのユーザーによって共有されます。

于 2013-03-12T21:05:44.893 に答える
0

このコードの主な問題は、これらの変数を静的に定義していることです。これは、次の2つのことを意味します。

  1. bytesTransferredとのインスタンスは1つだけfileSizeで、単一のJVMで作成されます。
  2. すべてのスレッドがこれらの値を共有します。

WeblogicのようなJavaEEコンテナはマルチスレッド環境であるため、複数のアクティブな接続がある場合は常に問題が発生します。

これらをインスタンス(非静的)変数に変更して、リクエストごとに新しいProgressListenerをインスタンス化してみてください。

于 2013-03-13T12:32:08.790 に答える