应用线程池

应用线程池
一、任务与执行策略之间的隐性耦合。
1、有些类型的任务需要明确一个执行的策略,包括:
1)依赖的任务
2)使用线程限制的任务
3)对响应时间敏感的任务
4)使用ThreadLocal的任务
2、线程饥饿死锁(Thread starvation dead)
如果线程中一个任务依赖于其他任务的执行,就可能产生死锁。
3、耗时操作
解决方法:设置阻塞操作的超时时间,如Thread.join, BlockingQueue.put, CountDownLatch.await, Selector.select

二、设置线程池的大小
1、避免线程池的长度硬编码,需要考虑计算环境,资源预算和任务的自身特性
2、公式及定义

三、配置ThreadPoolExecutor
1、ThreadPoolExecutor为Executor提供基本的实现,可以通过它构造自己的Executor。
2、线程的创建与销毁,ThreadPoolExecutor的构造函数的几个参数:corePoolSize,maximumPoolSize,keepAliveTime
3、管理队列任务
ThreadPoolExecutor允许提供一个BlockingQueue来持有等待执行的任务。
任务排队的方式有三种: 无限队列,有限队列,同步移交
如何避免资源耗尽。
4、饱和策略
1)通过setRejectedExecutionHandler来修改ThreadPoolExecutor的饱和策略。
2)JDK提供了几种不同的RejectedExecutionHandler的实现,实现了不同的策略AbortPolicy,CallerRunsPolicy,DiscardPolicy,DiscardOldestPolicy
AbortPolicy :引起execute抛出未检查的RejectedExecutionException,调用者可以捕获这个异常,进行处理
DiscardPolicy:当新提交的任务不能进入队列等待执行的时候,discard会默认放弃这个任务。
DiscardOldestPolicy:策略选择丢弃的任务,放弃即将执行的任务,重新提交新任务。
CallerRunsPolicy:既不抛异常,也不抛弃任务。它把一些任务退回给调用者,以减缓任务流。
3)使用semaphore来抑制任务提交。
4)线程工厂ThreadFactory,接口只有一个方法newFactory
5、扩展ThreadPoolExecutor
1)提供几个函数让子类去重写 beforeExecute(),afterExecute(),terminate()
无论任务是从run()中返回,还是抛出异常,afterExecute都会被执行;
如果beforeExecute抛出一个runtimeException,任务将不被执行,afterExecute也不会被调用。
terminate 在线程池完成关闭后调用。
6、并行递归算法
1)顺序执行改为并行执行。
2)谜题框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java线程池在实际应用中非常常见,以下是一些常见的线程池应用实例: 1. Web服务器:在Web服务器中,可以使用线程池来处理客户端请求。每当有一个请求到达时,可以将其封装成一个任务提交给线程池线程池会自动分配线程来处理请求,从而提高服务器的并发性能。 2. 文件下载器:在文件下载器中,可以使用线程池来同时下载多个文件。每个文件可以作为一个独立的任务提交给线程池线程池会自动创建并管理多个线程来并发下载文件,加快下载速度。 3. 数据库连接池:在使用数据库连接时,可以使用线程池来管理数据库连接。通过将每个数据库操作封装成一个任务提交给线程池线程池可以管理连接的创建和释放,避免频繁地创建和关闭数据库连接,提高数据库操作的效率。 4. 定时任务调度:在定时任务调度中,可以使用线程池来执行定时任务。可以将每个定时任务封装成一个任务提交给线程池线程池会根据设定的时间间隔自动执行任务,实现定时任务的调度功能。 5. 并行计算:在需要进行大量计算的场景下,可以使用线程池来进行并行计算。将计算任务分解成多个子任务,每个子任务作为一个独立的任务提交给线程池线程池会自动创建并管理多个线程来并行执行计算任务,提高计算速度。 这些只是一些常见的应用实例,实际上线程池Java开发中的应用非常广泛,可以根据实际需求灵活地运用线程池来提高程序的性能和并发处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值