首页 > 试题广场 >

import java.util.concurrent.Ar

[单选题]
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Main {
    public static void main(String[] args) {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 15, TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(5), new ThreadPoolExecutor.CallerRunsPolicy());
    }
}
线程池executor在空闲状态下的线程个数是?
  • 0
  • 5
  • 10
  • 不确定
hreadPoolExecutor的重要参数
 corePoolSize:核心线程数: 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭
 queueCapacity:任务队列容量(阻塞队列),当核心线程数达到最大时,新任务会放在队列中排队等待执行
maxPoolSize:最大线程数
当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务
当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常
---如果allowCoreThreadTimeOut默认为false,不手动shutdown,则空闲线程数为是核心线程数:5
发表于 2019-03-16 09:47:19 回复(0)

对ThreadPoolExecutor的参数解析,

ThreadPoolExecutor(int corePoolSize,

                        int maximumPoolSize,

                        long keepAliveTime,

                        TimeUnit unit,

                        BlockingQueue<Runnable> workQueue,

                        RejectedExecutionHandler handler)

5表示核心线程数,默认情况下核心线程会一直存活;

10表示线程池所能容纳的最大线程数,超过这个数的线程将被阻塞;

15表示非核心线程的闲置超时时间,超过这个时间就会被回收;

unit指定keepAliveTime的单位;workQueue线程中的任务队列,常用的是三种队列:SynchronousQueue,LinkedBlockingDeque,ArrayBlockingQueue;

threadFactory线程工厂,提供创建新线程的功能;当线程池中的资源已经全部使用,添加新线程被拒绝时,会调用RejectedExecutionHandler的rejectedExecution方法。

最大的-已经使用的=10-5=5

发表于 2019-09-05 21:01:07 回复(0)