使用 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 來實現任務。