Android XmlPullParser newPullParse线程安全

Android XmlPullParser newPullParse线程安全,android,thread-safety,xmlpullparser,Android,Thread Safety,Xmlpullparser,为什么下面的代码不是线程安全的,以及如何修复它 public abstract class BaseResponseHandler extends AsyncHttpResponseHandler { private static XmlPullParserFactory xmlPullParserFactory; public static synchronized XmlPullParser newPullParser(String input) throws XmlPul

为什么下面的代码不是线程安全的,以及如何修复它

public abstract class BaseResponseHandler extends AsyncHttpResponseHandler {
    private static XmlPullParserFactory xmlPullParserFactory;

    public static synchronized XmlPullParser newPullParser(String input) throws XmlPullParserException {
        if (xmlPullParserFactory == null) {
            xmlPullParserFactory = XmlPullParserFactory.newInstance();
        }

        final XmlPullParser parser = xmlPullParserFactory.newPullParser();
        parser.setInput(new StringReader(input));
        return parser;
    }
}
两种可能的方法:

1) 在每次调用中创建多个实例。这是昂贵的,但因为它不是线程安全的,这是一种选择

XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
final XmlPullParser parser = xmlPullParserFactory.newPullParser();
parser.setInput(new StringReader(input));
2) 创建一个实例,并使用它在每次同步下创建不同的解析器

XmlPullParser parser = null;
synchronized(xmlPullParserFactory) {
   parser = xmlPullParserFactory.newPullParser();
}

在高并发性下,选项1比选项2快得多。我建议您选择选项1。

xmlPullParserFactory不同步,如何修复该代码?