2015-09-11 78 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; 
}