使用 Threadpool 添加两个 int 数组

Threadpool 有一个任务队列,每个任务都将在这些线程上执行。

以下示例显示如何使用 Threadpool 添加两个 int 数组。

Version >= Java SE 8

int[] firstArray = { 2, 4, 6, 8 };
int[] secondArray = { 1, 3, 5, 7 };
int[] result = { 0, 0, 0, 0 };

ExecutorService pool = Executors.newCachedThreadPool(); 

// Setup the ThreadPool:
// for each element in the array, submit a worker to the pool that adds elements
for (int i = 0; i < result.length; i++) {
    final int worker = i;
    pool.submit(() -> result[worker] = firstArray[worker] + secondArray[worker] );
}

// Wait for all Workers to finish:
try {
    // execute all submitted tasks
    pool.shutdown();
    // waits until all workers finish, or the timeout ends
    pool.awaitTermination(12, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
    pool.shutdownNow(); //kill thread
}

System.out.println(Arrays.toString(result));

笔记:

  1. 这个例子纯粹是说明性的。实际上,通过使用线程来完成这么小的任务,将不会有任何加速。由于任务创建和调度的开销会浪费运行任务所花费的时间,因此可能会减速。

  2. 如果你使用的是 Java 7 及更早版本,则可以使用匿名类而不是 lambdas 来实现任务。