阻塞
- 取值时,队列为空,取不到阻塞
- 存值时,队列已满,放不进去而阻塞
BlockingQueue
- add 非阻塞 向一个满的队列里存元素失败时会抛出异常
- remove非阻塞 向一个空的队列里取元素失败时会抛出异常
- offer 向一个满的队列里存元素失败时会返回false
- poll 向一个空的队列里取元素失败时会返回null
- take 阻塞
- put 阻塞
阻塞队列
- ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
- Linked BlockingQueue:一个由链表结构组成的有界阻塞队列。
- PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
- DelayQueue:一个使用优先级队列实现的无界阻塞队列。
- SynchronousQueue:一个不存储元素的阻塞队列。
- LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
- LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
线程池
- Executor interface
- ExecutorService interface
- ThreadPoolExecutor class
- execute() 不关心返回结果
- submit() 关心返回结果
- shutdown() 尝试关闭一个线程,当前没有执行任务的线程,进行中断
- shutdownNow() 不管当前任务有无执行线程,都尝试进行中断
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {}
任务特性,cpu密集型、IO密集型、混合型
maximumPoolSize:cpu密集型 ,不要超过CPU的核心数 ,最多+1 Runtime.getRuntime().availableProcessors()
maximumPoolSize:IO密集型(磁盘和网络) ,CPU的核心数x2