Java多线程文件系统树遍历

标签 java concurrency

我的面试有一个小任务(原文如此!)。
我需要创建 java CLI 程序来搜索与某种模式匹配的特定文件。他们说我需要在不使用 util.concurrent 包的情况下使用多线程方法,并在并行 Controller 上提供良好的性能。

从我的角度来看,这非常简单——我可以为每个子文件夹创建特定的线程并运行它的内容,然后为每个子文件夹运行另一个线程...
但这并不是那么容易 :) 也许有人可以向我建议我应该避免的典型陷阱。或者任何关于在 Java 中实现这一点的正确方法的建议将不胜感激。

谢谢!

UPD1
文件名应匹配模式。

最佳答案

问题是找到足够数量的线程并尽可能平均地分配工作。

假设您不知道每个文件夹中的文件和子目录的数量,这可能会变得非常棘手。

这是一个开始的想法:

您可能要做的是创建多个线程,这些线程在中央文件夹列表上运行,并为您遇到的每个文件夹生成一个线程,直到达到某个最大值。然后每个线程都可以将其工作目录的子文件夹放入中央列表,完成后它可能会从该列表中选择下一个。

如果一个文件夹被放入列表并且没有达到最大线程数,一个新的线程会立即产生。

如果线程已用完工作并且文件夹列表为空,它可以停止(如果需要需要您生成一个新的)或等到列表上有一个文件夹或应用程序发出所有文件夹的信号被处理。

最后,不要忘记同步文件夹列表。

希望能帮助您入门。


编辑:(不要太认真地对待以下内容:))

您还可以使用另一个不使用 java.util.concurrent 包的线程池实现:)

编辑 2:基本上我上面描述的是一个简单且特定于任务的线程池实现。您可能会尝试查找有关自己构建线程池的更多信息(在您的任务上下文中,线程池任务将扫描一个文件夹)。

关于Java多线程文件系统树遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499203/

相关文章:

java - 并发包中的阻塞队列方法;

java - 为什么tomcat改jsp后不需要重启

java - 根据jsp中的输入选择表

java - 无法理解在 Java 中使用 ASM 字节码重命名的方法

Java处理JSON

java - 观察多个 CDI 事件?

multithreading - 为什么在多核 CPU 上增加计算过程需要更长的时间

java - 多线程代码对于很多工作人员来说太慢,但对于很少的工作人员来说速度很快

java - 为什么java双重检查锁单例必须使用 volatile 关键字?

c++ - 可以像在 erlang 中那样在 C 中编写并发可扩展的可靠程序吗?