0

私のアプリケーション(マルチスレッドアプリケーション)では、GCが呼び出されると、シグナルハンドラーが呼び出されます。このハンドラーでは、GCが呼び出されたことを示唆するプロパティを設定しようとしています。

System.setProperty(key, "true") ;

他のスレッドは、を使用してキーを読み取ります

System.getProperty(key) ;

ただし、この問題は、キーの値がtrueに設定されていて、アプリケーションの他のスレッドがこの値をtrueとして読み取らない場合に発生します(それでも、それらのスレッドではfalseです-アプリケーションの起動時に設定された値)何度もデバッグしましたが、修正できませんでした。これについてのあなたの提案が必要です。前もって感謝します

4

1 に答える 1

0

setProperty(...)との両方があるので、これは私を驚かせgetProperty(...)ますsynchronized:

public synchronized Object setProperty(String key, String value) {
    return put(key, value);
}
...
public synchronized V get(Object key) {
Entry tab[] = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
    ...
}
  • スレッドが の異なる値を使用している可能性はありkeyますか? 彼らはどのようにしてその価値を得るのですか?final static定数ですか?

  • スレッドが値を適切にテストしていない可能性がありますか? あなたはこのようなことをしているはずです:

    if (Boolean.parseBoolean(System.getProperty(key)) {
       ...
    }
    
于 2012-07-13T07:06:23.313 に答える