0%
前言
Java高并发学习笔记
BlockingQueue阻塞队列
- 队列的使用场景:将数据存入队列,可以启动缓冲作用。消峰流量
- 阻塞队列实现了生产者和消费者之间的解耦
创建一个阻塞队列
ArrayBlockingQueue链表阻塞队列
<length>
:队列长度
1
| BlockingQueue blockingQueue = new ArrayBlockingQueue<>(<length>);
|
LinkedBlockingQueue链表阻塞队列
- 不指定长度默认是无界的,默认大小是
Integer.MaxValue
1 2
| BlockingQueue blockingQueue = new LinkedBlockingQueue<>(); BlockingQueue blockingQueue = new LinkedBlockingQueue<>(<length>);
|
向阻塞队列插入数据
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()方法
take
poll()方法
重载方法
1
| blockingQueue.poll(<timeout>, TimeUnit.SECONDS);
|
具有优先级的阻塞队列
创建一个实现了Comparable接口的JavaBean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class User implements Comparable<User> {
private int priority; @override public int compareTo(User user) { return user.priority-this.priority; } public User(int priority) { this.priority = priority; } }
|
创建一个具有优先级的阻塞队列
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<>();
|
完成