小编Ola*_*hat的帖子

创建动态(增长/缩小)线程池

我需要在Java中实现一个线程池(java.util.concurrent),其空闲时线程数达到某个最小值,当作业提交到它上面的速度超过完成执行时,它会增长到上限(但绝不会更远) ,当所有作业完成并且不再提交任何作业时,缩小回到下限.

你会如何实现这样的东西?我想这将是一个相当常见的使用场景,但显然java.util.concurrent.Executors工厂方法只能创建固定大小的池和池,当提交许多作业时,这些池和池无限增长.本ThreadPoolExecutor类提供corePoolSizemaximumPoolSize参数,但它的文档似乎暗示,只有这样,才能不断有超过corePoolSize线程在同一时间使用有界作业队列,在这种情况下,如果你已经达到maximumPoolSize线程,你会得到工作拒绝你必须自己处理?我想出了这个:

//pool creation
ExecutorService pool = new ThreadPoolExecutor(minSize, maxSize, 500, TimeUnit.MILLISECONDS,
    new ArrayBlockingQueue<Runnable>(minSize));
...

//submitting jobs
for (Runnable job : ...) {
    while (true) {
        try {
            pool.submit(job);
            System.out.println("Job " + job + ": submitted");
            break;
        } catch (RejectedExecutionException e) {
            // maxSize jobs executing concurrently atm.; re-submit new job after short wait
            System.out.println("Job " + job + ": rejected...");
            try {
                Thread.sleep(300);
            } catch (InterruptedException …
Run Code Online (Sandbox Code Playgroud)

java multithreading threadpool

15
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×1

multithreading ×1

threadpool ×1