线程池ThreadPool

线程池ThreadPoolExecutor

ThreadPoolExecutor threadPoolExecutor =
                new ThreadPoolExecutor(3,
                        5,
                        10L,
                        TimeUnit.MINUTES,
                        new LinkedBlockingQueue<Runnable>(3),
                        Executors.defaultThreadFactory(),
                        new ThreadPoolExecutor.CallerRunsPolicy());

corePoolSize:核心线程数量

maximumPoolSize:最大线程数量

keepAliveTime:10L 线程存活时长

TimeUnit:时间单位

BlockingQueue:阻塞队列 长度是可接受的最大等待线程数

ThreadFactory:创建线程工厂,可以自定义线程名等

RejectedExecutionHandler:拒绝策略,如果阻塞队列满了之后要执行的拒绝策略包括四种:

              CallRunnerPolicy()-新起一个池外线程来执行任务,

              AbortPolicy() 中断策略抛出异常

              DiscardPolicy() 直接丢弃策略

              DiscardOledstPolicy() 丢弃等待最久线程

 

CPU密集型时,任务可以少配置线程数,大概和机器的cpu核数相当,这样可以使得每个线程都在执行任务

IO密集型时,大部分线程都阻塞,故需要多配置线程数,2*cpu核数

posted on 2020-10-27 16:15  AlphaGo1号  阅读(142)  评论(0编辑  收藏  举报

导航