同步访问文件

时间:2012-11-26 11:43:37

标签: java android

我想实现自己的记录器,将日志写入文件。它可以从许多线程运行,问题是如何同步访问日志文件。

   private synchronized static void writeToFile(String tag, String msg, 
        Throwable tr, Context ctx) {
    try {
        String s = System.getProperty("line.separator");
        File f = Environment.getExternalStorageDirectory();
        Log.i(TAG, "Path to app " + f.getAbsolutePath());
        File l = new File(f, "log.txt");
        if (!l.exists()) {
            l.createNewFile();
        }

        String e = Log.getStackTraceString(tr);
        StringBuilder b = new StringBuilder();
        b.append(HttpCommand.getDateForUrl(System.currentTimeMillis()));
        b.append(tag);
        b.append(msg);
        b.append(e);
        b.append(s);

        OutputStream out = new FileOutputStream(l);
        out.write(b.toString().getBytes());
        out.flush();
        out.close();
    } catch (IOException e) {
        Log.e(TAG, "Failed to create backup");
    }
}

如果我在不同的线程中传递对数据库的同步访问是否足够?

synchronized(X.class) {
    writeTiFile()
}

2 个答案:

答案 0 :(得分:0)

由于writeToFile()函数是同步的,因此您不必使用synchronized {}块包装对它的任何调用。

有关详细信息,请参阅此处: http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

答案 1 :(得分:0)

您可以使用ConcurrentLinkedQueue,将所有消息放入Queue并创建从队列中获取的线程并将其写入文件。