一、读写锁
使用步骤
二、阻塞队列 (BlockingQueue)
提供线程安全的队列访问方式;
当阻塞队列进行插入数据时,若队列满,则线程阻塞,直到队列非满的时候
当阻塞队列取数据时,若队列为空,则线程阻塞直到队列非空时候。
阻塞队列,常用于“生产者和消费者”的场景,生产者往队列中添加元素,消费者往队列中拿出元素。
方法\处理方式 | 抛出异常 | 返回特殊值 | 一直阻塞 | 超出退出 |
---|---|---|---|---|
插入 | add(e) | offer(e) | put(e) | offer(e,time,unit) |
删除 | remove() | poll() | take() | poll(time,unit) |
检查方法 | element() | peek() | 不可用 | 不可用 |
- 超时退出:当阻塞队列满时,队列会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。
JDK7提供了7个阻塞队列。分别是
- ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
- LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
- PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
- DelayQueue:一个使用优先级队列实现的无界阻塞队列。
- SynchronousQueue:一个不存储元素的阻塞队列。
- LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
- LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
三.线程池
当程序需要创建大量生命周期较短的线程时,如果频繁创建和销毁线程,会影响性能,甚至导致JVM崩溃。
3-1 概念:
线程池中包括许多准备运行的空闲线程,将Runable交给线程池,即使run方法已经执行完,线程不会死亡。而是等待下一个Run方法到来
3-2 作用:
1:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
2 :提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
3:提高线程的可管理性。
3-3 执行器(Executor)
关于:newCachedThreadPool,newFixedThreadPool,newSingleThreadExecutor