我有一段代码将对象写入磁盘,就像将对象放入LinkedBlockingQueue一样。
截至目前,这是单线程。我需要使其多线程,因为内容被写入磁盘上的不同文件。因此,独立编写它们没有任何害处。
我不确定我是否可以在这里使用ThreadPool,因为我不知道什么时候将对象放在队列中!!现在,如果我决定拥有5个线程的fixedThreadPool,我如何在多个对象之间分配它?
任何建议都非常感谢。 这是我现有的代码。当我在队列中得到一个新对象时,我想生成一个新线程。
答案 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
}