Я могу понять, почему сетевые приложения использовали бы мультиплексирование (для не создания слишком многих потоков), и почему программы будут использовать асинхронные вызовы для конвейерной обработки (более эффективного). Но я не понимаю цели эффективности AsynchronousFileChannel.
Какие-либо идеи?
Это канал, который вы можете использовать для асинхронного чтения файлов, т.е. операции ввода-вывода выполняются в отдельном потоке, так что поток, из которого вы его вызываете, может заниматься другими делами, пока происходят операции ввода-вывода.
Например: read()
методы класса возвращают объект Future
для получения результата чтения данных из файла. Итак, что вы можете сделать, это вызвать read()
, который немедленно вернется с объектом Future
. В фоновом режиме другой поток будет считывать фактические данные из файла. Ваш собственный поток может продолжать заниматься своими делами, а когда ему понадобятся считанные данные, вы вызовете get()
на объекте Future
. Это вернет данные (если фоновый поток еще не закончил чтение данных, он заставит ваш поток блокировать их до тех пор, пока они не будут готовы). Преимущество этого метода в том, что вашему потоку не нужно ждать всю длину операции чтения; он может заниматься другими делами, пока ему действительно не понадобятся данные.
См. документацию.
Обратите внимание, что AsynchronousFileChannel
будет новым классом в Java SE 7, которая еще не выпущена.