阻塞队列:
支持操作
- add:增加一个元素:满,抛异常
- remove:移除并返回队列头部的元素:空,抛异常
- element:返回队列头部元素:空,抛异常
- offer:添加一个元素并返回true:满,返回false
- poll:移除并返回头部元素:空,返回null
- peek:返回队列头部的元素:空,返回null
- put:添加一个元素:满,阻塞
- take:移除并返回队列头部的元素:空,阻塞
四种实现
- LinkedBlockingQueue
- ArrayBlockingQueue
- PriorityBlockingQueue
- DelayQueue
Callable
Runnable封装一个异步运行的任务。
Callable和Runnable相似,但它有返回值。
FutureTask:构造函数(callable task) 或者 (runable task,V result)
future:get,cancel
callable:call
三者的关系
利用Callable创建一个FutureTask并用它启动一个Thread,因为FutureTask同时也实现了runable接口
Executor 执行器
Executor类拥有大量的涌来构建线程池的静态工厂,他们是:
- newCachedThreadPool:在需要时创建新线程,空闲线程会被保留60秒
- newFixedThreadPool:创建一个大小固定的线程池,提交任务大于空闲线程数,得不到服务的将被放到队列中。
- newSingleThreadExecutor:大小为1的线程池,由一个线程依次执行队列中的任务。
他们都返回一个实现ExecutorService的ThreadPoolExecutor类的对象。
调用submit()来提交一个runable或callable对象
如果希望取消任务或者提交了一个callable对象,保存好返回的Future对象
当不想提交任何任务的时候调用shutdown