Страница 1 из 1
Запись и чтение файлов из нескольких потоков
Добавлено: 28 авг 2014, 18:08
Norman
Вопрос новичка - допустимо ли записывать и/или читать файлы в android из нескольких потоков?
Re: Запись и чтение файлов из нескольких потоков
Добавлено: 29 авг 2014, 09:32
altwin
Norman писал(а):Вопрос новичка - допустимо ли записывать и/или читать файлы в android из нескольких потоков?
конечно, главное не забывать "ставить замок", т.е. запрещать доступ к файлу, который уже открыт в другом потоке и выполнять синхронизацию. Все подробно есть тут:
http://www.amazon.com/Java-Concurrency- ... 0321349601
P.S. эта книга покрывает на много больше чем нужно для android, но прочитайте ее хоть 1 раз и жизнь будет легче, жить будет веселее

Re: Запись и чтение файлов из нескольких потоков
Добавлено: 29 авг 2014, 11:02
Norman
Т.е. чтение одного файла невозможно сразу несколькими потоками?
Немного разверну вопрос:
1) Есть объекта класса File, ссылающийся на папку ресурсов для приложения. Я могу использовать этот объект для создания других объектов класса "File" в нескольких потоках одновременно?
2) Является ли ошибкой ситуация, если из нескольких потоков одновременно будет происходить запись в разные файлы?
3) Является ли ошибкой ситуация, если один файл читается из нескольких потоков одновременно?
Re: Запись и чтение файлов из нескольких потоков
Добавлено: 29 авг 2014, 11:22
altwin
Norman писал(а):Т.е. чтение одного файла невозможно сразу несколькими потоками?
Немного разверну вопрос:
1) Есть объекта класса File, ссылающийся на папку ресурсов для приложения. Я могу использовать этот объект для создания других объектов класса "File" в нескольких потоках одновременно?
2) Является ли ошибкой ситуация, если из нескольких потоков одновременно будет происходить запись в разные файлы?
3) Является ли ошибкой ситуация, если один файл читается из нескольких потоков одновременно?
1) Можете, но зачем если все ресурсы доступны через класс R. Опятьже делать вы можете что угодно, но должны понимать, что порядок выполнения потоков не гаррантирован, и синхронизация потоков -это ваша проблема.
2) Нет.
3) Нет, но опять таки порядок выполнения не гаррантирован, т.е. читать / записывать в файл потоки должны по очереди, классическая очередь.
Важно понимать что вы можете запустить поток и остановить, тоесть события - старт и стоп, либо завершено корректно либо с ошибкой - все. Остальное не гаррантирует никто и проконтролировать невозможно, более того поведение будет отличаться при каждом запуске, потому единственный варриант избежать непредвиденный ошибок - жесткий контроль порядка доступа к данным.
P.S. объяснить это в форуме проблематично... для работы с потоками не столько нужно что -то знать, сколько просто опыт. Каждый раз все по разному и вы просто должны понимать как они будут себя вести... Общая теория довольно объемная, но иначе никак, там очень много подводных камней. Попробуйте посмотреть короткую серию видео по работе с потоками
https://www.youtube.com/watch?v=s032s29 ... -qJdf38oKp