Параллельный доступ к файлам в Android

Я знаю, что многие ОС выполняют своего рода блокировку файловой системы, чтобы предотвратить несогласованные представления. Есть ли какие-либо гарантии, что Java и/или Android делают о потокобезопасности доступа к файлам? Я хотел бы узнать как можно больше об этом, прежде чем я пойду вперед и напишу код параллелизма сам.

Если я пропустил аналогичный вопрос, на который был дан ответ, не стесняйтесь закрывать эту тему. Спасибо.

2 ответов


Android построен поверх Linux, поэтому наследует семантику файловой системы Linux. Если вы явно не заблокируете файл, несколько приложений и потоков могут открыть его для доступа на чтение и запись. Если вам действительно не нужна межпроцессная синхронизация файлов, я бы предложил использовать обычные примитивы синхронизации Java для произвольного доступа к файлу.


нормальная функциональность чтения / записи (FileInputStream и т. д.) не обеспечивает никакой потокобезопасности AFAIK. Для достижения потокобезопасности необходимо использовать FileChannel. Это будет выглядеть примерно так:

FileInputStream in = new FileInputStream("file.txt");
FileChannel channel = in.getChannel();
FileLock lock = channel.lock();
// do some reading
lock.release();

Я бы прочитала блокировка файлов doc, и позаботьтесь с продевать нитку!