Java线程池执行器
示例
使用的常见执行程序是ThreadPoolExecutor,它负责线程处理。您可以配置执行者在无事可做时必须始终维护的最小线程数(称为核心大小),以及如果有更多工作要做,则池可以增长到的最大线程大小。一旦工作负载减少,池将再次缓慢减少线程数,直到达到最小大小。
ThreadPoolExecutor pool = new ThreadPoolExecutor(1, // 至少准备好一个线程,
// 即使没有执行的Runnable
5, // 最多五个Runnable /线程
// 并行执行
1, TimeUnit.MINUTES, // 空闲线程在一个之后终止
// 分钟,超过最小池大小
new ArrayBlockingQueue<Runnable>(10)); // 优秀的Runnables被保存在这里
pool.execute(new Runnable() {
@Override public void run() {
//要运行的代码
}
});
注意:如果ThreadPoolExecutor使用无界队列配置,则线程数将不会超过,corePoolSize因为仅当队列已满时才创建新线程:
带有所有参数的ThreadPoolExecutor:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
RejectedExecutionHandler handler)
从JavaDoc
如果运行的线程数大于corePoolSize但小于maximumPoolSize,则仅在队列已满时才创建新线程。
优点:
可以控制BlockingQueue的大小,并且可以避免内存不足的情况。有限的有限队列大小不会降低应用程序性能。
您可以使用现有策略或创建新的拒绝处理程序策略。
在默认的ThreadPoolExecutor.AbortPolicy中,处理程序在拒绝时会抛出运行时RejectedExecutionException。
在中ThreadPoolExecutor.CallerRunsPolicy,调用执行自己的线程运行任务。这提供了一种简单的反馈控制机制,它将降低新任务的提交速度。
在中ThreadPoolExecutor.DiscardPolicy,简单地删除了无法执行的任务。
在中ThreadPoolExecutor.DiscardOldestPolicy,如果未关闭执行程序,则将丢弃工作队列开头的任务,然后重试执行(这可能再次失败,从而导致重复执行此操作)。
ThreadFactory可以配置自定义,这很有用:
设置更具描述性的线程名称
设置线程守护程序状态
设置线程优先级
这是如何使用ThreadPoolExecutor的示例
以上是 Java线程池执行器 的全部内容, 来源链接: utcz.com/z/348711.html