【发布时间】:2014-02-03 02:47:01
【问题描述】:
我想逐行读取包含 URL 的每一行的特定单元格的 Excel 工作表。我需要通过以编程方式访问该站点来处理这些 URL。由于在单线程模型中连续访问每个单元会非常慢,我计划这样:
Step-1: Read excel sheet's cell of nth row.
Step-2: nThreads++
Step-3: if nThreads==MAX_NO_OF_THREADS, sleep till one of the threads is finished.
else Instantiate a thread to process the URL of that cell.
Step-4: Goto 1.
要实现这一点,我需要以下东西:
1-Some 表示创建线程池。我可以使用线程对象数组创建。但更喜欢更好的选择。
2-一个管理线程,它执行从池中获取线程的任务,处理它们的工作并休眠,直到有一个线程可用于执行任务。
那么我有哪些选择?
【问题讨论】:
-
使用Executors。不要尝试自己创建池。同步是一件棘手的事情。
-
@zapl 酷!但是负责委派任务和等待的管理器线程又是什么呢?
-
这是一个由演员建模的完美任务。考虑使用 Akka 之类的东西。
-
@raphw 我更喜欢标准 J2SE 实用程序而不是一些第三方库。
-
这里最大的架构错误是使用同步 I/O 来获取 URL。您不需要每个 HTTP 请求一个线程。见
AsyncHttpClient。
标签: java multithreading