创建多个线程以将文件写入磁盘,Java

时间:2016-03-10 13:55:53

标签: java multithreading threadpool callable

我有一段代码将对象写入磁盘,就像将对象放入LinkedBlockingQueue一样。

截至目前,这是单线程。我需要使其多线程,因为内容被写入磁盘上的不同文件。因此,独立编写它们没有任何害处。

我不确定我是否可以在这里使用ThreadPool,因为我不知道什么时候将对象放在队列中!!现在,如果我决定拥有5个线程的fixedThreadPool,我如何在多个对象之间分配它?

任何建议都非常感谢。 这是我现有的代码。当我在队列中得到一个新对象时,我想生成一个新线程。

2 个答案:

答案 0 :(得分:0)

一般来说,如果您的文件位于同一物理设备上,那么由于存储设备在读/写操作上同步工作,您将无法获得性能优势。所以你的I / O会阻塞你的线程,这会导致速度变慢,并且肯定会浪费那些可以做有用工作的线程。

答案 1 :(得分:0)

how do i distribute it among multiple objects?

嗯,你不必担心任务分配。您需要做的就是提交一个runnable或callable(它描述您的任务),它将被传递给池中的空闲线程,或者如果所有线程都忙于处理,这个新任务将在队列中等待。

以下是您可以尝试的内容......

1)创建一个最适合您需要的线程池。

ExecutorService es = Executors.newFixedThreadPool(desiredNoOfThreads);

2)因为你已经有了队列 -

while (true) {
    //peek or poll the queue and check for non null value
    //if not null then create a runnable or callable and submit
    //it to the ExecutorService
}