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;
}

}

我不知道代码出了什么问题。

你的代码没有错,但由于方法是同步的,它似乎成为瓶颈。

假设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;
}

最新更新