《JAVA并发编程实践》读书笔记(四)

第8章 线程池的使用
任务和执行策略是隐含耦合的,包括:依赖性任务、使用线程封闭机制执行的任务、对响应时间敏感的任务以及使用ThreadLocal的任务。

8.1 处理运行时间较长的任务
采用限定任务等待资源的时间,而不要无限期等待。Java类库大多数可阻塞的方法中,都提供的限定时间的版本和无限时间的版本,如 Thread.join, BlockingQueue.put, CountDownLatch.await, Selector.select。 如果等待超时,可以标记任务失败,然后中止任务或者将任务重新放回队列重新执行。

8.2配置ThreadPoolExecutor
newFixedThreadPoolExecutor 工厂方法将线程池的基本大小和最大大小设置为参数中制定的值,而创建的线程池不会超时。newCachedThreadPool工厂方法将线程池的最大大小设置为Integer.MAX_VALUE, 而将基本大小设置为0.
ThreadPoolExecutor允许提供一个BlockingQueue来保存等待执行的任务。基本的任务排队方法有3中:无界队列(LinkedBlockingQueue),有界队列(ArrayBlockingQueue,有界的LinkedBlockingQueue, PriorityBlockingQueue)和同步移交(Synchronous Handoff)。

8.3 饱和策略
当有界队列被填满以后,饱和策略开始发挥作用。ThreadPoolExecutor的饱和策略可以通过调用setRejectedExecutionHandler来修改。JDK提供了几种不同的饱和策略:AbortPolicy, CallerRunsPolicy, DiscardPolicy, DiscardOldestPolicy.

8.4 线程工厂
默认的线程工厂将创建一个新的、非守护的线程,并且不包含特殊的配置信息。我们可以自定义自己的线程工厂来打印日志信息。

第9章 图形用户界面应用程序
几乎所有的GUI工具包(包括Swing和SWT)都被实现为单线程子系统,这意味着所有的GUI操作都被限制在单个线程中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值