【发布时间】:2014-11-13 07:53:46
【问题描述】:
我的主线程中有一个函数可以将一些数据写入磁盘。我不希望我的主线程卡住(磁盘 I/O 的高延迟)并且创建一个新线程只是为了写是一种矫枉过正。我决定使用 ExecutorService。
ExecutorService executorService = Executors.newFixedThreadPool(3);
Future future = executorService.submit(new Callable<Boolean>() {
public Boolean call() throws Exception {
logger.log(Level.INFO, "Writing data to disk");
return writeToDisk();
}
});
writeToDisk是写入磁盘的函数
这是一个不错的方法吗?如果有的话,有人可以参考更好的方法吗?
更新:数据大小将大于 100 MB。磁盘带宽为 40 MBps,因此写入操作可能需要几秒钟。我不想调用函数卡住,因为它必须做其他工作,所以,我正在寻找一种方法来安排磁盘 I/O 与调用线程的执行异步。
我需要委派任务并忘记它!
【问题讨论】:
-
这个问题可能过于宽泛,因为您对您的确切要求仍然非常不明确。例如,我们对您的磁盘配置和正在写入的块的大小一无所知。
-
你知道
AsynchronousFileChannel吗?
标签: java multithreading java.util.concurrent