`

线程并发学习五(基础构建模块)

阅读更多

1.将线程安全类委托给现有的线程安全类,只需让现有的线程安全类管理多有的状态即可。

2.Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(synchronizer);

3.同步容器类:同步容器类是线程安全的,但在某些情况下,可能需要额外的客户端加锁来保护符合操作. 早期的jdk中,同步容器类包括Vector 和 Hashtable

4.并发容器:java5.0提供了多种并发容器类来改进同步容器的性能,同步容器将所有对容器状态的访问都串行化,以实现他们的线程安全性,这种方法的代价是严重降低并发性,当多个线程竞争容器的锁时,吞吐量将严重降低。
并发容器是针对多个线程并发访问设计的。

java5.0增加了两种新的容器类型:Queue和BlockingQueue,Queue的实现,包括ConcurrentLinkedQueue,这是一个传统的先进先出队列。 PriorityQueue并发的优先队列。 Queue上的操作不会阻塞,如果队列为空,那么获取元素的操作将返回空值。


5.ConcurrentHashMap,同步容器类在执行每个操作期间都持有一个锁,ConcurrentHashMap是一个基于散列的Map,使用了一种完全不同的加锁策略,来提供更高的并发性和伸缩性。ConcurrentHashMap并不是将每个方法都在同一个锁上同步并使得每次只能有一个线程访问容器,而是使用一种粒度更细的加锁机制来实现更大程度的共享,这种机制称为分段锁。

ConcurrentHashMap:并发访问环境下将实现更高的吞吐量,而在单线程环境中只损失非常小的性能。


ConcurrentHashMap与其他并发容器一起增强了同步容器类:他们提供的迭代器不会抛出ConcurrentModificationException,因此不需要在迭代过程中对容器加锁。
ConcurrentHashMap中没有实现对Map加锁以及提供独占访问。



6.CopyOnWriteArrayList:用于代替同步List,在某些情况下提供更好的并发性能,并且在迭代期间不需要对容器加锁或者复制[CopyOnWriteArraySet是代替同步的set]


7.阻塞队列和生产者--消费者模式
阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法,if队列满了,那么put方法将阻塞知道空间可用,if队列为空,take方法将会阻塞知道元素可用。
当然队列可以是无界的,无界队列永远不会满,所以put方法永远不会阻塞。


8.串行线程封闭:java.util.concurrent中实现的各种阻塞队列都包含了足够的内部同步机制,从而安全的将对象从生产者发布到消费者线程。


9.双端队列与工作密取

10闭锁

11栅栏








分享到:
评论

相关推荐

    Java并发编程-线程安全与基础构建模块

    NULL 博文链接:https://lemon-1227.iteye.com/blog/1493843

    《java并发编程实战》读书笔记-第5章-基础构建模块

    《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括同步容器类、并发容器类、阻塞队列和生产者消费者模式、阻塞和中断方法、同步工具类。最后是构建高效且可伸缩的结果缓存

    Java并发编程实战2019.zip

    第5章 基础构建模块 第6章 任务执行 第7章 取消与关闭 第8章 线程池的使用 第9章 图形用户界面应用程序 第10章 避免活跃性危险 第11章 性能与可伸缩性 第12章 并发程序的测试 第13章 显式锁 第14章 构建...

    Java并发编程实战

    第5章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException 5.1.3 隐藏迭代器 5.2 并发容器 5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 ...

    Java并发编程(学习笔记).xmind

    基础构建模块 同步容器类 分类 Vector Hashtable 实现线程安全的方式 将状态封装起来,对每个公有方法都进行同步 存在的问题 复合操作 修正方式 客户端加锁 ...

    Java 并发编程实战

    第5章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException 5.1.3 隐藏迭代器 5.2 并发容器 5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 ...

    Java并发编程实战-读书笔记

    5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可伸缩性 12 并发程序的测试 13 显示锁 14 构建自定义的同步工具 15 原子变量与非阻塞同步机制 16 Java...

    Intel.Thread.Profiler.英特尔_.线程档案器4

    part 4 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述 <br>立刻采用多线程技术,释放多核处理器...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    Intel.Thread.Profiler.英特尔®.线程档案器

    因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述 <br>立刻采用多线程技术,释放多核处理器(包括最新...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    如何提高Maven多模块项目编译速度.docx

    Maven多模块项目编译速度慢,下面我们来学习下优化的方法。 mvn clean package -T 4C -Dmaven.test.skip=true -Dmaven.compile.fork=true -T 4C 代表本机4个CPU内核都参与编译工程, -Dmaven.test.skip=true 代表...

    Intel.Thread.Profiler.英特尔_.线程档案器9

    Intel.Thread.Profiler.Intel.Thread.Profiler.英特尔_.线程档案器9 <br> 因为文件很大...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP* 英特尔_.线程档案器6

    Intel.Thread.Profiler.英特尔_.线程档案器7

    Intel.Thread.Profiler.英特尔_.线程档案器7 <br> 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    Intel.Thread.Profiler.英特尔_.线程档案器6

    Intel.Thread.Profiler.英特尔_.线程档案器6 <br> 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    Intel.Thread.Profiler.英特尔_.线程档案器5

    Intel.Thread.Profiler.英特尔_.线程档案器5 <br> 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    Intel.Thread.Profiler.英特尔_.线程档案器10

    Intel.Thread.Profiler.英特尔_.线程档案器10 <br> 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    Intel.Thread.Profiler.英特尔_.线程档案器8

    Intel.Thread.Profiler.英特尔_.线程档案器6 <br> 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    Intel.Thread.Profiler.英特尔_.线程档案器11

    Intel.Thread.Profiler.英特尔_.线程档案器11 <br>Intel.Thread.Profiler.英特尔_.线程档案器].Intel.Thread....C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    Intel.Thread.Profiler.英特尔_.线程档案器3

    part 3 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述 <br>立刻采用多线程技术,释放多核处理器...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*

    C++后端学习的技术栈

    3.网络编程基础:熟练使用套接字编程、TCP/IP协议、HTTP(S)协议等,构建稳定可靠的网络通信模块。 4.并发与多线程编程:掌握C++并发库(如std::thread、std::async、std::mutex等)以及多线程设计策略,确保在多核...

Global site tag (gtag.js) - Google Analytics