2015-09-11 125 views
0

我有一個用於創建新的XmlPullParser的函數。我的分析器顯示線程停留在這一點,這是一個潛在的死鎖情況。XmlPullParser同步:線程正在等待

private static XmlPullParserFactory xmlPullParserFactory; 

public static synchronized XmlPullParser newPullParser(InputStreamReader ip) throws Exception { 
    if (xmlPullParserFactory == null) { 
     xmlPullParserFactory = XmlPullParserFactory.newInstance(); 
    } 

    final XmlPullParser parser = xmlPullParserFactory.newPullParser(); 
    parser.setInput(ip); 
    return parser; 
} 

}

我無法弄清楚什麼是錯的代碼。

回答

0

你的代碼沒有錯,但由於該方法是同步的,它似乎成爲瓶頸。

假設XmlPullParserFactory.newInstance()是線程安全的,你可以簡單地丟棄懶工廠創立(這是不必要的,因爲該工廠是在大量使用),然後又下降了同步的語句(是嗎?):

private static XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance(); 

public static XmlPullParser newPullParser(InputStreamReader ip) throws Exception { 
    final XmlPullParser parser = xmlPullParserFactory.newPullParser(); 
    parser.setInput(ip); 
    return parser; 
}