线程池

1、执行器

1.1、为什么使用线程池

构建一个新的线程有一定的代价,因为涉及操作系统的交互。如果程序中创建大量的声明很短的线程,应该使用线程池(Thread pool),

另一个使用线程池的理由是减少并发线程的数目。创建大量线程会大大降低性能甚至使得虚拟机崩溃。

如果有一个会创建许多线程的算法,应该使用一个线程数“固定的”线程池以限制并发线程的总数

1.2、如何使用线程池

执行器类有许多静态工作方法来创建线程池

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwKRhJHA-1581408475415)(images/35.png)]

  • newCachedThreadPool方法构建一个线程池,对于每个任务,如果有空闲线程可以使用,立即让它执行任务,如果没有可用的空闲线程,则创建一个线程。
  • newFixedThreadPool方法构建一个具有固定大小的线程池;如果提交的任务树多余空闲的线程数,那么得不到服务任务放置到队列中。当其他任务完成以后再运行它们,
  • newSingleThreadExecutor是一个退化了大小为1的线程池:由一个线程执行提交的任务,一个接着一个

这3个方法返回实现了ExecutorService接口的ThreadPoolExecutor类的对象

可用下面的方法之一将一个 Runnable对象或 Callable对象提交给 ExecutorService:

Future<?> submit(Runnable task)
Future<T> submit(Runnable task, T result)
Future<T> submit(Callable<T> task)

当用完一个线程池的时候, 调用 shutdown。该方法启动该池的关闭序列。被关闭的行器不再接受新的任务。当所有任务都完成以后,线程池中的线程死亡。另一种方法是调用shutdownNow。该池取消尚未开始的所有任务并试图中断正在运行的线程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYezCu59-1581408475417)(images/36.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值