線程池的拆分

 線程池的拆分可根據具體的業務進行拆分,每個線程執行的業務邏輯應該是一樣且同步執行,

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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章