Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XmlPullParser同步:线程正忙于等待_Java_Android_Multithreading_Xml Parsing_Xmlpullparser - Fatal编程技术网

Java XmlPullParser同步:线程正忙于等待

Java XmlPullParser同步:线程正忙于等待,java,android,multithreading,xml-parsing,xmlpullparser,Java,Android,Multithreading,Xml Parsing,Xmlpullparser,我有一个创建新XmlPullParser的函数。我的分析器显示线程在这一点上被卡住,这是一种潜在的死锁情况 private static XmlPullParserFactory xmlPullParserFactory; public static synchronized XmlPullParser newPullParser(InputStreamReader ip) throws Exception { if (xmlPullParserFactory == null) {

我有一个创建新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是线程安全的,是吗?您可以简单地删除工厂的延迟创建,这是不必要的,因为工厂正在大量使用,然后还可以删除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;
}