XmlPullParser同步:线程忙着等待

时间:2015-09-11 19:14:59

标签: java android multithreading xml-parsing 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;
}

}

我无法弄清楚代码有什么问题。

1 个答案:

答案 0 :(得分:0)

您的代码没有错,但由于该方法已同步,因此似乎成了瓶颈。

假设XmlPullParserFactory.newInstance()是线程安全的(是吗?),你可以简单地删除工厂的懒惰创建(由于工厂大量使用这是不必要的),然后也删除synchronized语句:

private static XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();

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