多线程 第九节 线程池

线程池通过复用线程减少创建销毁开销,防止资源过度竞争和内存溢出。主要创建方式有ThreadPoolExecutor和Executors。submit()提交带返回值任务,execute()提交无返回值任务。关闭线程池用shutdown()或shutdownNow(),前者待任务执行完后终止,后者尝试停止所有线程。
摘要由CSDN通过智能技术生成

Thread Pool

1、    为了避免系统频繁的创建和销毁线程,我们可以将创建的线程进行复用。
2、    在线程池中总有那么几个活跃的线程,也有一定的最大值限制,一个业务使用完线程之后,不是立即销毁而是将其放入到线程池中,从而实现线程的复用。简而言之:创建线程变成了从线程池获取空闲的线程,关闭线程变成了向池子中归还线程。
3、    线程池优点:
    1)    可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。
    2)    避免创建大量同类线程所导致的资源过度竞争和内存溢出的问题。 
4、    创建线程池有两种方式:ThreadPoolExecutor 和 Executors

ThreadPoolExecutor 

1、    submit() 用于提交需要返回值的任务。线程池会返回一个 future 类型的对象,通过这个 future 对象可以判断任务是否执行成功。
2、    可以通过 future 的 get() 方法来获取返回值,get() 方法会阻塞当前线程直到任务完成,而使用 get(long timeout,TimeUnit unit)方法则会阻塞当前线程一段时间后立即返回,这时候有可能任务没有执行完。
3、    使用 submit 的坑:
    1)    使用 execute() 代替 submit() 
    2)    使用 Future
4、    execute() 方法输入的任务是一个 Runnable 类的实例,用于提交不需要返回值的任务,所以无法判断任务是否被线程池执行成功。
5、    线程池关闭,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值