ExecutorCompletionService

来源:互联网 发布:淘宝代刷信誉是真的吗 编辑:程序博客网 时间:2024/06/10 01:03

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class ThreadPool {

static class ComputationRunnable implements Callable<Integer> {    private int index;    private static final Random random = new Random(31);    public ComputationRunnable(int index) {        this.index = index;    }    @Override    public Integer call() {        try {            int r = random.nextInt(10);            if (r == 5) {                throw new RuntimeException("Error!!");            }            TimeUnit.MILLISECONDS.sleep(r);        } catch (InterruptedException e) {            Thread.currentThread().interrupt();        }        return Integer.valueOf(index);    }}public static void main(String[] args) {    ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime()            .availableProcessors());    CompletionService<Integer> ecs = new ExecutorCompletionService<Integer>(es);    for (int i = 0; i < 100; i++) {        ecs.submit(new ComputationRunnable(i));    }    for (int i = 0; i < 100; i++) {        Future<Integer> future = null;        try {            future = ecs.poll(1, TimeUnit.MILLISECONDS);            if (future != null) {                int ii = future.get();                System.out.println(ii);            } else {                System.out.println("\t未按时完成");            }        } catch (InterruptedException e) {            Thread.currentThread().interrupt();        } catch (ExecutionException e) {            // 任务没有正常执行,需要处理            // e.printStackTrace();            System.out.println("\t\t任务执行中出错");            future.cancel(true);        }    }    es.shutdown();}

}

0 0
原创粉丝点击