在java中创建一个线程或线程池数组

时间:2016-02-02 19:37:50

标签: java multithreading

我有一个单线程模型作业,它迭代一组数据并自定义数据。我想将集合划分为小的子列表,并希望每个子列表并行执行。我应该使用一个线程数组(数组的大小是创建的子列表的数量)还是一个线程池?

2 个答案:

答案 0 :(得分:0)

根据您要进一步划分的内容?如果您的作业/数据类型相同,那么让它们在一个集合中,线程池中的线程将从列表中获取任务并并行运行。

答案 1 :(得分:0)

最好在任何情况下都使用线程池,因为在这种情况下,您可以摆脱用于管理对象数组的低级操作,并提高灵活性。

您应该在代码中使用 ExecutorService 实例,并选择正确的类型。 例如:

  1. Executors.newCachedThreadPool - 如果您的处理逻辑足够简单并且不需要太多处理时间(不会产生太多会导致不同异常的并发线程)。
  2. Executors.newFixedThreadPool - 如果您的处理逻辑足够复杂,那么您应该限制线程数。
  3. 所以,我认为你应该:

    1. 在您的消费者中创建所需的ExecutionService。
    2. 浏览您的集合并将处理作业提交给执行者(对于每个元素,Callable的实例)。将它们保存在List<Future<?>>实例中。
    3. 通过期货迭代(等待完成所有任务),将结果保存在新集合中,在某处发送结果并提交kafka偏移量。