提交 17a1aebc 编写于 作者: 沉默王二's avatar 沉默王二 💬

并发容器

上级 3c4752e7
......@@ -262,10 +262,10 @@
- [协作类Condition](docs/thread/condition.md)
- [线程阻塞唤醒类LockSupport](docs/thread/LockSupport.md)
- [Java的并发容器](docs/thread/map.md)
- [ConcurrentHashMap](docs/thread/ConcurrentHashMap.md)
- [ConcurrentLinkedQueue](docs/thread/ConcurrentLinkedQueue.md)
- [BlockingQueue](docs/thread/BlockingQueue.md)
- [吊打Java并发面试官之CopyOnWriteArrayList](docs/thread/CopyOnWriteArrayList.md)
- [并发容器ConcurrentHashMap](docs/thread/ConcurrentHashMap.md)
- [非阻塞性队列ConcurrentLinkedQueue](docs/thread/ConcurrentLinkedQueue.md)
- [阻塞队列BlockingQueue](docs/thread/BlockingQueue.md)
- [并发容器CopyOnWriteArrayList](docs/thread/CopyOnWriteArrayList.md)
- [吊打Java并发面试官之ThreadLocal](docs/thread/ThreadLocal.md)
- [面试必备:Java线程池](docs/thread/pool.md)
- [为什么阿里巴巴要禁用Executors创建线程池?](docs/thread/ali-executors.md)
......
......@@ -12,7 +12,7 @@ head:
content: Java,并发编程,多线程,Thread,BlockingQueue
---
# 14.22 BlockingQueue
# 14.22 阻塞队列 BlockingQueue
BlockingQueue 是 Java 中的一个接口,它代表了一个线程安全的队列,不仅可以由多个线程并发访问,还添加了等待/通知机制,以便在队列为空时阻塞获取元素的线程,直到队列变得可用,或者在队列满时阻塞插入元素的线程,直到队列变得可用。
......
......@@ -12,7 +12,7 @@ head:
content: Java,并发编程,多线程,Thread,ConcurrentHashMap
---
# 14.20 ConcurrentHashMap
# 14.20 并发容器ConcurrentHashMap
[HashMap](https://javabetter.cn/collection/hashmap.html) 在多线程环境下扩容会出现 CPU 接近 100% 的情况,因为 HashMap 并不是线程安全的,我们可以通过 Collections 的`Map<K,V> synchronizedMap(Map<K,V> m)`将 HashMap 包装成一个线程安全的 map。
......
......@@ -12,7 +12,7 @@ head:
content: Java,并发编程,多线程,Thread,ConcurrentLinkedQueue
---
# 14.21 ConcurrentLinkedQueue
# 14.21 非阻塞性队列ConcurrentLinkedQueue
ConcurrentLinkedQueue 是 `java.util.concurrent`(JUC) 包下的一个线程安全的队列实现。基于非阻塞算法(Michael-Scott 非阻塞算法的一种变体),这意味着 ConcurrentLinkedQueue 不再使用传统的锁机制来保护数据安全,而是依靠底层原子的操作(如 [CAS](https://javabetter.cn/thread/cas.html))来实现。
......
......@@ -12,7 +12,7 @@ head:
content: Java,并发编程,多线程,Thread,CopyOnWriteArrayList
---
## CopyOnWriteArrayList的简介
# 14.23 并发容器 CopyOnWriteArrayList
java学习者都清楚ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制,会抛出**ConcurrentModificationException**异常,也就是说ArrayList并不是一个线程安全的容器,当然您可以用Vector,或者使用Collections的静态方法将ArrayList包装成一个线程安全的类,但是这些方式都是采用java关键字synchronzied对方法进行修饰,利用独占式锁来保证线程安全的。但是,由于独占式锁在同一时刻只有一个线程能够获取到对象监视器,很显然这种方式效率并不是太高。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册