多线程应用程序中的System.setproperty

时间:2012-07-13 06:55:52

标签: java multithreading garbage-collection

在我的应用程序(多线程应用程序)中,当调用GC时,会调用信号处理程序。在此处理程序中,我尝试设置一个属性以建议已调用GC。

System.setProperty(key, "true") ;

其他线程使用

读取密钥
System.getProperty(key) ;

但是,当键的值设置为true而应用程序的其他线程未将此值读为true时,会出现问题(对于它们仍然是假的 - 在启动期间设置的值)应用程序) 我调试了很多次,但无法纠正。需要你的建议。提前致谢

1 个答案:

答案 0 :(得分: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)) {
       ...
    }