在我的应用程序(多线程应用程序)中,当调用GC时,会调用信号处理程序。在此处理程序中,我尝试设置一个属性以建议已调用GC。
System.setProperty(key, "true") ;
其他线程使用
读取密钥System.getProperty(key) ;
但是,当键的值设置为true而应用程序的其他线程未将此值读为true时,会出现问题(对于它们仍然是假的 - 在启动期间设置的值)应用程序) 我调试了很多次,但无法纠正。需要你的建议。提前致谢
答案 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)) {
...
}