07-JUC--并发容器

本文深入探讨了Java中的并发容器,包括线程安全的ConcurrentHashMap、CopyOnWriteArrayList以及各种阻塞队列如BlockingQueue。分析了HashMap在多线程环境下的问题,阐述了ConcurrentHashMap的实现原理和优势,同时还介绍了ArrayBlockingQueue、LinkedBlockingQueue等具体实现。文章通过实例讲解了为何在并发场景中使用队列,并总结了不同队列的特点。
摘要由CSDN通过智能技术生成

并发容器概览

ConcurrentHashMap;线程安全的HashMap
CopyOnWriteArrayList:线程安全的List
BlockingQueue:这是一个接口,表示阻塞队列,非常适用于作为数据共享的通道。
ConcurrentLinkedQueue:高效的非阻塞并发队列,使用链表实现。可以看做一个线程安全的LinkedList
ConcurrentSkipListMap:是一个Map,使用跳表的数据结构进行快速查找。

集合类的历史

Vector和Hashtable

使用了synchronized,并发性能较差。

ArrayList和HashMap

虽然这两个类不是线程安全的,但是可以用 Collections.synchronizedList(new ArrayListt)和 Collections.synchronizedMap(new HashMap<K,V>())使之变成线程安全的。

ConcurrentHashMap

  1. Map简介
  2. 为什么需要ConcurrentHashMap
  3. HashMap的分析
  4. JDK1.7的ConcurrentHashMap实现和分析
  5. JDK1.8的ConcurrentHashMap实现和源码分析
  6. 对于JDK1.7和JDK1.8的优缺点,为什么要把1.7的结构改成1.8的结构?
  7. 组合操作: ConcurrentHashMap也不是线程安全的
  8. 实际生产案例

Map简介

在这里插入图片描述

Map接口常用方法


/**
 * @Classname MapDemo
 * @Description 演示Map的基本用法
 * @Date 2021/2/26 10:23
 * @Created by YoungLiu
 */
public class MapDemo {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        System.out.println(map.isEmpty());
        map.put("123",23);
        map.put("456",12);
        System.out.println(map.keySet());
        System.out.println(map.get("123"));
        System.out.println(map.size());
        System.out.println(map.containsKey("123"));
    }
}

为什么HashMap是线程不安全的?
  1. 同时put碰撞导致数据丢失
  2. 同时put扩容导致数据丢失
  3. 死循环造成的CPU100%
死循环造成的CPU100%

在多个线程同时操作hashmap时候,会造成链表的死循环,你指向我,我指向你。

hashmap分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
ConcurrentHashMap的putVal流程

在这里插入图片描述
ConcurrentHashMap的get流程

在这里插入图片描述

CopyOnWriteArrayList

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

并发队列

为什么要使用队列

用队列可以在线程间传递数据:生产者消费者模式、银行转账

  1. Queue
  2. BlockingQueue
    在这里插入图片描述

BlockingQueue 阻塞队列

1. 什么是阻塞队列

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 主要方法介绍

在这里插入图片描述

3. ArrayBlockingQueue

在这里插入图片描述

4.LinkedBlockingQueue

在这里插入图片描述

5. PriorityBlockingQueue

在这里插入图片描述

6. SynchronousQueue

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

非阻塞并发队列

在这里插入图片描述

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值