20170606

来源:互联网 发布:软件研发立项报告 编辑:程序博客网 时间:2024/06/15 23:25

1 线程池研究
什么是线程池?一组线程定时处于休眠状态,等待唤醒执行,
一减少在线程启动和销毁时的开销
二将当前任务和主线程隔离,能实现和主线程的异步执行
1.1 executors的api介绍
java类库提供了几种静态方法来创建一个线程池
a newFixedThreadPool 创建一个固定长度的线程池,当达到线程池最大数量时,现成的规模将不在变化。
fixedThreadPool会使用一个固定的数目 线程来处理若干数目的县城人物,它最多线程的数目是固定的
b newCachedThreadPool 创建一个可缓存的线程池,如果当前线程池的规模超出了处理需求,将回收空的线程,当需求增加时,会增加线程数量,线程池规模无限制,默认销毁线程时长60秒
适合于短时间多次运行的线程,cachedThreadPool首先根据需要创建足够多的线程,当有些线程被回收了,才会停止创建
shutdown() 方法指执行完所有线程后销毁线程
shutdownnow 指直接结束所有线程
另注意:
1主线程结束后,线程池可能还会继续运行
2放入线程池中的人物并不一定会按顺序运行

c newSingleThreadPool创建一个单线程的Executor,确保任务对了,顺序执行d newScheduleThreadPool 创建一个固定长度的线程池,而且以延迟或者定时的方式来执行,类似Timer四种ThreadPool都是调用了ThreadPoolExecutor来创建的ThreadPoolExecutor总结有新线程进入线程池中时1当运行线程数小于核心线程数时,直接把线程加入执行队列2当运行线程数大于等于核心线程数,且缓冲队列未满的情况下,加入缓冲队列3当运行线程数大于等于核心线程数,且缓冲队列已满而且运行线程数小于最大线程数时,添加新的运行线程4当以上条件都不满足,拒绝执行