Java并发编程深度解析与实战-谭锋
- 书名: Java并发编程深度解析与实战
- 作者: 谭锋
- 简介: 本书涵盖Java并发编程体系的核心库和核心类使用及原理分析,具体包括线程、synchronized、volatile、J.U.C中的重入锁和读写锁、并发中的条件等待机制、J.U.C并发工具集、深度探索并发编程不得不知的工具、阻塞队列、并发安全集合、线程池、异步编程特性等。书中针对每一个技术点,纵向分析相关的所有内容,并且对相关知识点进行了非常详细的说明,同时站在架构实践的角度来看待并发,通过大量实战案例让读者理解各类技术在实际应用中的使用方法。 作者花了4年时间投入了大量精力对并发编程领域做了深入的研究,将自己13年Java开发及架构经验融入了书中,对于各位读者来说,这应该是一本非常值得阅读的图书。
- 出版时间 2021-10-01 00:00:00
- ISBN: 9787121421365
- 分类: 计算机-编程设计
- 出版社: 电子工业出版社
高亮划线
封面
版权信息
作者简介
内容简介
前言
读者服务
第1章 Java线程的实践及原理揭秘
第2章 深度揭秘synchronized实现原理
-
📌 实际上,synchronized关键字只需要保护可能存在线程安全问题的代码,因此,我们可以通过控制同步锁的作用范围来实现这个平衡机制。在synchronized中,提供了两种锁,一是类锁,二是对象锁。 ^8-6121-6221
- ⏱ 2024-03-07 19:51:16
-
📌 所以,从这个层面来看,要实现锁互斥要满足如下两个条件。• 必须竞争同一个共享资源。• 需要有一个标记来识别当前锁的状态是空闲还是繁忙。 ^8-10842-10959
- ⏱ 2024-03-07 19:55:40
-
📌 从图中可以看到一个锁状态的字段,它包含五种状态分别是无锁、偏向锁、轻量级锁、重量级锁、GC标记。 ^8-12714-12762
- ⏱ 2024-03-07 19:58:14
-
📌 在JDK 1.6之后,synchronized做了很多优化,其中针对锁的类型增加了偏向锁和轻量级锁,这两种锁的核心设计理念就是如何让线程在不阻塞的情况下达到线程安全的目的。 ^8-21533-21619
- ⏱ 2024-03-07 20:01:48
-
📌 所以偏向锁的作用就是,线程在没有线程竞争的情况下去访问synchronized同步代码块时,会尝试先通过偏向锁来抢占访问资格,这个抢占过程是基于CAS来完成的,如果抢占锁成功,则直接修改对象头中的锁标记。其中,偏向锁标记为1,锁标记为01,以及存储当前获得锁的线程ID。而偏向的意思就是,如果线程X获得了偏向锁,那么当线程X后续再访问这个同步方法时,只需要判断对象头中的线程ID和线程X是否相等即可。如果相等,就不需要再次去抢占锁,直接获得访问资格即可,其实现原理如图2-13所示。 ^8-21957-22198
- ⏱ 2024-03-07 20:03:41
-
📌 所谓的轻量级锁,就是没有抢占到锁的线程,进行一定次数的重试(自旋)。 ^8-25113-25147
- ⏱ 2024-03-07 20:07:22
-
📌 在JDK 1.6中默认的自旋次数是10次,我们可以通过-XX:PreBlockSpin参数来调整自旋次数。同时开发者在JDK 1.6中还对自旋锁做了优化,引入了自适应自旋锁,自适应自旋锁的自旋次数不是固定的,而是根据前一次在同一个锁上的自旋次数及锁持有者的状态来决定的。如果在同一个锁对象上,通过自旋等待成功获得过锁,并且持有锁的线程正在运行中,那么JVM会认为此次自旋也有很大的机会获得锁,因此会将这个线程的自旋时间相对延长。反之,如果在一个锁对象中,通过自旋锁获得锁很少成功,那么JVM会缩短自旋次数。 ^8-25672-25925
- ⏱ 2024-03-07 20:09:46
第3章 volatile为什么能解决可见性和有序性问题
-
📌 线程安全性主要体现在三个方面,分别是原子性、可见性和有序性 ^9-384-413
- ⏱ 2024-03-07 19:40:30
-
📌 对于在Java Memory Model中可能存在的线程安全性问题,JVM中定义了禁止指令重排序的方法及监视器锁的规则来解决原子性、可见性、有序性问题,监视器锁就是synchronized的功能实现,我们还可以通过volatile关键字来禁止指令重排序。 ^9-38631-38758
- ⏱ 2024-03-07 19:12:03