2012-07-13 126 views
0

在我的应用程序(多线程应用程序)中,调用GC时,调用信号处理程序。在此处理程序中,我试图设置属性以表明GC已被调用。多线程应用程序中的System.setproperty

System.setProperty(key, "true") ; 

其他线程读取使用

System.getProperty(key) ; 

然而,关键的,当钥匙的值被设置为true,而应用程序的其他线程不读这个值作为出现问题真(仍然是错误的 - 它是在应用程序启动期间设置的值) 我调试了很多次,但无法得到它的纠正。需要你的建议。在此先感谢

回答

0

这让我惊讶,因为无论是setProperty(...)getProperty(...)是​​:

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)) { 
        ... 
    } 
    
+0

我读从配置文件,该文件是througout的application.Hence相同键的值,这是不可能的按键都会有不同的values.Regarding你的第二个担忧,我正在使用相同的策略。首先读钥匙,然后解析它的值 – 2012-07-13 07:12:06

+1

我正在抓住稻草@Mridul,但你是否尝试过让'key'字段变得不稳定?你确定线程都看到'key'的相同值吗? – Gray 2012-07-13 07:13:44