| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Java多线程并发之同步容器和并发容器-第一篇 -> 正文阅读 |
|
[数据结构与算法]Java多线程并发之同步容器和并发容器-第一篇 |
Java多线程并发之同步容器和并发容器-第一篇 概述 本文主要讲解在Java多线程并发开发中,集合中有哪些支持并发的的。什么是同步容器(集合),什么是并发容器(集合)?并发容器分类有哪些?每个分类都有哪些类? 本文是《凯哥分享Java并发编程之J.U.C包讲解》系列教程中的第五篇。如果想系统学习,凯哥(kaigejava)建议从第一篇开始看。 从本篇开始,我们就来讲解讲解Java的并发容器。大致思路:先介绍什么是并发容器。然后讲解list相关的、map相关的以及队列相关的。这个系列会有好几篇文章。大家最好跟着一篇一篇学。 正文开始 回顾Java中常用的容器(集合): 我们知道Java内部的容器类是集合相关的。主要包括:List接口、Map接口以及Set接口及其子类。 Collection及Map体系如下图: 编辑 我们常用的类关系简化版: 编辑 上图中少了一个类:Properties.这个类用的比较少。 编辑 我们来简单复习下Java中集合子类及数据结构:
说明:关于hashMap是如何解决hash冲撞问题,可以详见凯哥写的:《hashMap怎么保证hash一致性的》这篇文章详细介绍了。 编辑 我们知道,绝大部分常用的集合都是线程不安全的,但是也有线程安全的。 其中线程安全的类有: List接口下的Vector【及Stack(因为stack是Vector的子类)】 Map接口下的:HashTable【及properties(因为properties是HashTable的子类)】 我们来看看为什么vector和HashTable是线程的安全的? 查看vector源码中add方法: 编辑 在来看看HashTable源码中put方法: 编辑 发现了吗?无论是vector还是hashTable都是使用了Synchronized关键之修饰的。使用了互斥同步锁机制来保证线程安全性的。 在JDK 1.5版本之前,如果想要保证线程安全,使用这两个类或者使用Collections工具类的Synxxx方法来保证线程的安全。 编辑 同步容器: 这些使用类Synchronized关键字修饰的容器被称为:同步容器 同步容器的缺点: 但是我们知道使用互斥锁Synchronized在并发下是很影响效率的。那是因为将并行强制转换成串行的。加互斥锁后,只有等一个锁用完之后,下一个才可以接着使用。很影响效率。 在现在大数据高并发下,有没有更好的解决方案呢?当然有的,在JDK1.5版本之后,JDK内部为我们提供了一些并发容器。 并发容器 在一般情况不考虑并发和线程安全性问题的时候,我们使用非线程安全的集合效率更高,如果需要考虑线程安全,不考虑并发或者并发很小的情况下,可以使用同步容器。但是如果在高并发下,同步容器就不能使用了。可以使用并发容器。Java中并发容器在Java.util.concurrent包下。 Concurrent包下有很多并发相关的,本篇我们就来扒拉扒拉众多并发相关类中和并发容器相关的十几个类: 编辑 编辑 并发容器分类 编辑 大致可以分以下三类: 1:List相关的并发容器 2:Map/Set相关的并发容器 为什么把Set划分到Map这个分类下呢?因为在Java的设计中,Set可以理解为阉割版的Map.说白了就是只有Key没有Value的Map. 3:队列相关的并发容器 从名字后缀我们就可以进行区分出来。三个分类相关类如下表:
题外话:通过上表,我们可以看出JDK中类命名规则。 编辑 1:Map/Set相关的就以Map/Set结尾;List相关的就以list结尾 2:当选队列都已queue结尾;双向队列都已Deque结尾。 这种类名命名规范:见名知意。在我们自己写代码的时候类命名也应该这样。 言归正传,我们接着来讲解。先来看看第一个类。List对应的并发类. |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:33:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |