Если я правильно понял ваш вопрос, вам нужен неблокирующий ввод-вывод для файлов. У меня для вас плохие новости.
NIO
Java NIO в Java6 поддерживает только операции блокировки при работе с файлами. Вы можете заметить это из того факта, что FileChannel
не реализует интерфейс SelectableChannel
. (NIO поддерживает неблокирующий режим для сокетов, однако)
Существует спецификация NIO.2 ( JSR-203 ), предназначенная для преодоления многих текущих ограничений java.io и NIO, а также для обеспечения поддержки асинхронного ввода-вывода для файлов. Насколько я понимаю, NIO.2 должен быть выпущен с Java 7.
Это ограничения библиотеки Java, поэтому вы будете страдать от них и в Scala.
Актеры
Актеры основаны на фреймворк-форке Дуга Ли (по крайней мере, в ветке 2.7.x до версия 2.7.7 ). Одна цитата из FJTask class :
На самом деле ничто не мешает
вы от блокировки в FJTask, и
очень короткие ожидания / блоки полностью
хорошо себя ведет Но FJTasks не являются
предназначен для поддержки произвольных
синхронизация, так как нет возможности
приостановить и возобновить отдельные задачи
как только они начали казнить.
Задачи FJ также должны быть конечными в
продолжительность - они не должны содержать
бесконечные петли. FJTasks, которые могут
необходимо выполнить блокирующее действие или
удерживать замки в течение длительных периодов или
цикл навсегда может вместо этого создать нормальный
объекты потока Java, которые сделают это.
FJTasks просто не предназначены для
поддержать эти вещи.
Библиотека FJ расширена в Scala, чтобы обеспечить унифицированный способ, позволяющий актеру функционировать как поток или как задача, основанная на событиях, в зависимости от количества рабочих потоков и «активности библиотеки» (вы можете найти объяснение в техническом отчете " Актеры, которые объединяют темы и события"(Филипп Халлер и Мартин Одерский).
Решение
Но в конце концов, если вы запускаете код блокировки в актере, он ведет себя так же, как если бы он был потоком, так почему бы не использовать обычный Thread
для блокировки операций чтения и отправки событий акторам на основе событий из этого потока?