线程池
Executor à执行线程的工具
ExecutorServiceà线程池的接口
ExecutorService threadPool = Executors.newFixedThreadPool(10);
创建可用状态固定数量的线程,以共享无界队列的方式运行这些线程
(常见无界队列:
ConcurrentLinkedQueue
ProrityBlockingQueue
DelayedQueue
)
在有可用线程之前,附加任务将在队列中等待
由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要的话)
如果线程不被显式的关闭,线程将一直存在于线程池当中
newCachedThreadPool带缓存的线程池
--根据需要创建线程的线程池,对于以前构造的线程可用时可以重用他们
--对于短期的异步tast而言这种线程池是优势
调用execute将重用构造好的(处于可用状态的--runnable的线程)
如果没有线程可用(处于runnable状态),创建一个新的线程并添加到线程池当中
从缓存中清除超过60秒未被使用的线程
长时间空闲的线程不会使用任何资源
newScheduledThreadPool计划线程池
创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行
重写pool中的schedule方法可以在延迟时间之后运行命令
重写pool中的scheduleAtFixedRate方法可以以固定速率运行命令
newSingleThreadPool单线程线程池
这个线程池只有一个线程, 这个线程池可以在线程死后(或发生异常时)重新启动一个线程来替代原来的线程继续执行下去!
newSingleScheduledThreadPool 单线程线计划程池
newSingleThreadPool 和 newScheduledThreadPool 的结合