我知道很多操作系统会对文件系统执行某种锁定,以防止视图不一致。 Java和/或Android是否保证文件访问的线程安全性?在我继续编写并发代码之前,我想尽可能多地了解这一点。
如果我错过了一个类似的答案,请随时关闭此帖子。感谢。
答案 0 :(得分:10)
Android建立在Linux之上,因此继承了Linux的文件系统语义。除非您明确锁定文件,否则多个应用程序和线程可以打开它以进行读/写访问。除非您确实需要跨进程文件同步,否则我建议使用普通的Java同步原语来仲裁对文件的访问。
答案 1 :(得分:5)
正常的读/写功能(FileInputStream等)不提供任何线程安全AFAIK。要实现线程安全,您需要使用FileChannel。这看起来像是:
FileInputStream in = new FileInputStream("file.txt");
FileChannel channel = in.getChannel();
FileLock lock = channel.lock();
// do some reading
lock.release();
我会阅读File Lock doc,并注意线程!