我可以理解为什么网络应用程序将使用多路复用(不创建太多线程),以及为什么程序将使用异步调用进行流水线化(更高效).但是我不明白AsynchronousFileChannel的效率目的.
有任何想法吗?
解决方法
这是一个可以用来异步读取文件的通道,即I / O操作是在单独的线程上完成的,因此您在调用它的线程可以在I / O操作发生时执行其他操作.
例如:类的read()方法返回一个Future对象,以获取从文件读取数据的结果.所以你可以做的是调用read(),它将立即返回一个Future对象.在后台,另一个线程将从文件中读取实际的数据.您自己的线程可以继续执行任务,当需要读取数据时,可以在Future对象上调用get().那将返回数据(如果后台线程尚未完成读取数据,则会使您的线程阻塞,直到数据准备就绪).这样做的优点是你的线程不必等待读取操作的整个长度;它可以做一些其他事情,直到它真正需要数据.
请注意,AsynchronousFileChannel将是Java SE 7中的一个新类,尚未发布.