创建多个线程将文件写入磁盘,Java
Creating multiple threads for writing files to Disk, Java
我有一段代码将对象写入磁盘,作为将对象放入 LinkedBlockingQueue 的时间。
到目前为止,这是单线程的。我需要让它成为多线程,因为内容被写入 disk.and 上的不同文件,因此,独立编写它们没有坏处。
我不确定我是否可以在这里使用线程池,因为我不知道对象什么时候会被放入队列!!现在如果我决定有一个 5 个线程的 fixedThreadPool,我该如何在多个对象之间分配它?
非常感谢任何建议。
这是我现有的代码。我想在队列中获得新对象时生成一个新线程。
一般来说,如果您的文件位于同一物理设备上,您将不会获得任何性能优势,因为存储设备在 read/write 操作上同步工作。因此,您的线程会在 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
}
我有一段代码将对象写入磁盘,作为将对象放入 LinkedBlockingQueue 的时间。
到目前为止,这是单线程的。我需要让它成为多线程,因为内容被写入 disk.and 上的不同文件,因此,独立编写它们没有坏处。
我不确定我是否可以在这里使用线程池,因为我不知道对象什么时候会被放入队列!!现在如果我决定有一个 5 个线程的 fixedThreadPool,我该如何在多个对象之间分配它?
非常感谢任何建议。 这是我现有的代码。我想在队列中获得新对象时生成一个新线程。
一般来说,如果您的文件位于同一物理设备上,您将不会获得任何性能优势,因为存储设备在 read/write 操作上同步工作。因此,您的线程会在 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
}