使用 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));
筆記:
-
這個例子純粹是說明性的。實際上,通過使用執行緒來完成這麼小的任務,將不會有任何加速。由於任務建立和排程的開銷會浪費執行任務所花費的時間,因此可能會減速。
-
如果你使用的是 Java 7 及更早版本,則可以使用匿名類而不是 lambdas 來實現任務。