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 回答