【笔记】Java高并发
前言
Java高并发学习笔记
BlockingQueue阻塞队列
- 队列的使用场景:将数据存入队列,可以启动缓冲作用。消峰流量
- 阻塞队列实现了生产者和消费者之间的解耦
创建一个阻塞队列
ArrayBlockingQueue链表阻塞队列
<length>
:队列长度
1 | BlockingQueue blockingQueue = new ArrayBlockingQueue<>(<length>); |
LinkedBlockingQueue链表阻塞队列
- 不指定长度默认是无界的,默认大小是
Integer.MaxValue
1 | BlockingQueue blockingQueue = new LinkedBlockingQueue<>(); |
向阻塞队列插入数据
add()方法
- 当队列满时,会抛异常
1 | blockingQueue.put(<item>); |
put()方法
- 当队列满时,不会抛异常,会产生阻塞
<item>
:插入的元素
1 | blockingQueue.put(<item>); |
offer()方法
- 当队列已满,会返回false;当队列未满,会返回true
1 | blockingQueue.offer(<item>); |
重载方法
- 当队列已满或产生超时时,会产生阻塞
<timeout>
:超时时间,单位毫秒
1 | blockingQueue.offer(<item>, <timeout>, TimeUnit.SECONDS); |
向阻塞队列删除数据
remove()方法
- 当队列为空时,会抛异常
1 | blockingQueue.remove(); |
take
- 当队列为空时,不会抛异常,会产生阻塞
1 | blockingQueue.take(); |
poll()方法
- 当队列为空时,会返回null
1 | blockingQueue.poll(); |
重载方法
- 当队列为空或产生超时时,会产生阻塞
1 | blockingQueue.poll(<timeout>, TimeUnit.SECONDS); |
具有优先级的阻塞队列
创建一个实现了Comparable接口的JavaBean
1 | public class User implements Comparable<User> { |
创建一个具有优先级的阻塞队列
1 | BlockingQueue<User> blockingQueue = new PriorityBlockingQueue<>(); |
将具有比较方法的对象存入队列
<priority>
:优先级
1 | blockingQueue.add(new User(<priority>)); |
ConcurrentMap高并发的Map
创建一个ConcurrentMap
- 并发安全的,引入了分段锁机制(1.8及之前版本)
- 引入了无锁机制(1.8之后版本)
- 底层分了16段(segment),每个段可以看做是一个HashTable,理论上并发性能要比HashMap高16倍
1 | ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>(); |