線程池的拆分可根據具體的業務進行拆分,每個線程執行的業務邏輯應該是一樣且同步執行,
talk is cheap, show you code
int columns = 10;
ExecutorService pool = Executors.newFixedThreadPool(columns);
final CountDownLatch countDownLatch = new CountDownLatch(columns);
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("run task:" + Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(1);
countDownLatch.countDown();
return "result";
}
};
List<Future<String>> futures = new ArrayList<>(columns);
for (int i = 0; i < columns; i++) {
futures.add( pool.submit(task));
}
//計數器2秒後喂置爲0,主線程強制往下執行
countDownLatch.await(2, TimeUnit.SECONDS);
for (Future<String> future : futures) {
if (future.isDone()) {
String s = future.get(1, TimeUnit.SECONDS);
System.out.println(s);
} else {
System.out.println("timeout");
}finally {
//弱依賴可添加
future.cancel();
}
}
pool.shutdown();