-1

下面的方法是从 AsynTask 的不同地方调用的。它是为 Android 编码的。获取 ConcurrentModificationException。如何使此方法线程安全

public static String saveJsonFile(File dir, String name, JSONObject data) {
        final File file = new File(dir.getPath() + File.separator + name);
        try {
            file.createNewFile();
        } catch (final IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        BufferedWriter printWriter = null;

        try {
            printWriter = new BufferedWriter(new FileWriter(file), 8192);
            // printWriter = new PrintWriter(file);
            if (data != null)
                data.write(printWriter); // java.util.ConcurrentModificationException



                      ........
                      ........
4

2 回答 2

0

你可以这样做:

private final Object lock = new Object();

public static String saveJsonFile(File dir, String name, JSONObject data) {
    final File file = new File(dir.getPath() + File.separator + name);
    try {
        file.createNewFile();
    } catch (final IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    BufferedWriter printWriter = null;

    try {
        printWriter = new BufferedWriter(new FileWriter(file), 8192);

        synchronized(lock) {
            if (data != null)
                 data.write(printWriter); // java.util.ConcurrentModificationException
                 //...
于 2013-07-10T10:05:06.017 回答
0

synchronized使您的代码data

synchronized(data) {
    try {
        printWriter = new BufferedWriter(new FileWriter(file), 8192);
        // ...
    }
}
于 2013-07-10T10:05:08.237 回答