[英]Creating multiple threads for writing files to Disk, Java
我有一段代码将对象放入LinkedBlockingQueue时将对象写入磁盘。
到目前为止,这是单线程的。 我需要使它成为多线程的,因为内容正在被写入磁盘上的不同文件。因此,独立编写它们不会有任何危害。
我不确定我是否可以在这里使用ThreadPool,因为我不知道何时将对象放置在队列中! 现在,如果我决定使用5个线程的fixedThreadPool,如何在多个对象之间分配它?
任何建议都非常感谢。 这是我现有的代码。 当队列中有新对象时,我想生成一个新线程。
一般而言,如果文件位于同一物理设备上,则由于存储设备在读取/写入操作中同步工作,因此不会获得性能上的好处。 因此,您的线程将被阻塞在I / O上,这可能导致速度降低,并且肯定会浪费可能在做有用工作的线程。
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.