java api 默认的4中创建线程池方法
1、ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
newCachedThreadPool.execute(new Runnable());
创建一个可缓存线程池,应用中存在的线程数可以无限大
2、ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
newFixedThreadPool.execute(new Runnable());
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
3、ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(2);
newScheduledThreadPool.schedule(new Runnable(),3, TimeUnit.SECONDS); // 延迟3秒执行runnable任务
创建一个定长线程池,支持定时及周期性任务执行。
4、ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor();
newSingleThreadExecutor.execute(new Runnable());
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
ThreadPoolExecutor 七个参数的详细说明
ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize 核心线程数
maximumPoolSize 最大线程数
keepAliveTime 当线程数大于核心线程数,空闲线程等待新任务的最大等待时间,超过最大等待时间这个线程就会被终止
unit 等待时间的单位
workQueue 阻塞队列
threadFactory 生成线程的工厂
handler 任务拒绝策略
CallerRunsPolicy 在调用execute方法线程中执行这个任务
AbortPolicy 直接丢弃任务并抛出RejectedExecutionException异常。
DiscardPolicy 丢弃任务但不抛出异常
DiscardOldestPolicy 丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)














网友评论