Which ThreadPool in Java should I use?

前端 未结 5 1793
花落未央
花落未央 2021-02-06 06:00

There are a huge amount of tasks. Each task is belong to a single group. The requirement is each group of tasks should executed serially just like executed in a single thread an

5条回答
  •  Happy的楠姐
    2021-02-06 06:50

    I had a problem similar to your, and I used an ExecutorCompletionService that works with an Executor to complete collections of tasks. Here is an extract from java.util.concurrent API, since Java7:

    Suppose you have a set of solvers for a certain problem, each returning a value of some type Result, and would like to run them concurrently, processing the results of each of them that return a non-null value, in some method use(Result r). You could write this as:

    void solve(Executor e, Collection> solvers)
            throws InterruptedException, ExecutionException {
        CompletionService ecs = new ExecutorCompletionService(e);
        for (Callable s : solvers)
            ecs.submit(s);
        int n = solvers.size();
        for (int i = 0; i < n; ++i) {
            Result r = ecs.take().get();
            if (r != null)
                use(r);
        }
    }
    

    So, in your scenario, every task will be a single Callable, and tasks will be grouped in a Collection>.

    Reference: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorCompletionService.html

提交回复
热议问题