2012-07-13 158 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