【发布时间】:2011-11-15 14:19:36
【问题描述】:
我们有一个应用程序从特定文件夹读取文件,处理它们并将其复制(一些业务逻辑)到另一个文件夹。
这里的问题是当需要处理大量文件时,运行应用程序的单个实例或单个线程已不足以处理这些文件。
我们为此采取的一种方法是启动应用程序的多个实例(我觉得这种方法有问题。如果有的话,请给我建议一个替代方案)。
产生线程或启动应用程序的多个实例,应注意,如果一个线程读取一个文件并开始处理它,另一个线程不应该拾取它。
我们试图通过一个包含文件夹中文件名列表的数据库表来实现这一点,这样当线程第一次读取表中的文件名时,我们将更改状态到 in-process 或 completed 并悲观地锁定表,使其他线程无法读取它。
有没有更好的办法解决这个问题?
【问题讨论】:
-
您需要确保磁盘子系统不是您的瓶颈。如果 CPU 或外部服务(例如数据库是你的瓶颈。
标签: java multithreading concurrency filesystems locking