![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程实战
文章平均质量分 93
钢铁-程序猿
这个作者很懒,什么都没留下…
展开
-
AQS(面试)
AQS(面试)AQS的全称是AbstractQueuedSynchronizerAQS内部维护一个状态state,通过原子更新(CAS)这个状态变量可实现加锁解锁操作。如果要实现自己的锁,可以基于AQS,重写tryAcquire,tryRelease,lock(会调用tryAcquire),unlock(tryRelease)方法。...原创 2020-08-21 15:47:54 · 898 阅读 · 0 评论 -
LongAdder详解
文章目录LongAdderadd方法casBaselongAccumulate方法longAccumulate方法详解后面补充LongAdderadd方法public void add(long x) { Cell[] as; long b, v; int m; Cell a; if ((as = cells) != null || !casBase(b = base, b + x)) { boolean uncontended = true;原创 2020-08-08 11:16:02 · 586 阅读 · 0 评论 -
AQS
文章目录AQS一、多线程中同步如何实现的wait要和synchronized一起使用一、ReentrantLock1、模拟一个同步的思路while自旋yield+自旋sleep+自旋park、unparkReentrantLock和AbstractQueuedSynchronizer重点ReentrantLock重入锁AQS一、多线程中同步如何实现的wait、notify、sychroniz...原创 2020-04-13 15:19:16 · 479 阅读 · 0 评论 -
第十五章、原子变量与非阻塞同步机制
文章目录第十五章 原子变量与非阻塞同步机制一、现有的锁的劣势二、比较交换指令CAS非阻塞计数器(此部分有误)原子变量是一种"更好的volatile"锁与原子变量的性能比较非阻塞算法(Nonblocking Algorithms)非阻塞的栈非阻塞的链表原子的域更新器ABA问题小结本文转于:链接第十五章 原子变量与非阻塞同步机制近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法采用底...转载 2020-04-13 15:20:07 · 122 阅读 · 0 评论 -
第十四章-构建自己的同步工具
文章目录第十四章 构建自定义的同步工具一、状态依赖性的管理1、依赖条件不满足时,可将依赖条件的失败传递给调用者2、依赖条件不满足时,可通过轮询和休眠实现简单阻塞3、条件队列(Condition Queue)能及时响应依赖状态的改变且不浪费CPU二、如何使用条件队列1、条件等待的标准形式2、条件等待的通知 notify 与notifyAll三、显式的Condition对象提供更加细粒度的条件队列1、...原创 2020-04-13 15:19:46 · 129 阅读 · 0 评论 -
三、Java并发编程实战之对象的组合
文章目录对象的组合一、设计线程安全的类(在思想上如何设计线程安全的类)如何设计线程安全的类1、收集同步需求2、依赖状态的操作3、状态的所有权二、如何封装非线程安全对象(实例封闭)1、Java监视器模式(内置锁,类中的组件不一定是线程安全的)2、示例:车辆跟踪三、线程安全性的委托(类中的各组件已经是线程安全的)1、例子:基于委托的车辆追踪器2、独立的状态变量(将线程安全性委托给多个状态变量)3、当委...原创 2020-04-13 15:20:53 · 331 阅读 · 0 评论 -
第十三章、显式锁
显式锁java5.0以前访问共享对象使用的机制只有synchronized和volatile。java5.0后提供了一种新的机制:ReentrantLock。ReentrantLock并不是代替内置加锁方法,而是当内置锁满足不了需求时,作为一种可高端的选择。一、Lock与ReentrantLockLock接口中定义了一种无条件、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是...原创 2020-04-13 15:24:04 · 179 阅读 · 0 评论 -
第十章、避免活跃性危险
文章目录避免活跃性危险一、死锁1、顺序死锁2、动态的顺序死锁避免活跃性危险一、死锁书上讲了一个例子:“哲学家吃饭”,每个人都拿自己左边的那一根筷子,那么谁都吃不了饭,产生死锁。当一个线程永远的持有一个锁,并且其他线程都尝试获得这个锁时,那么他们将永远被阻塞。 在线程A持有锁L并想获得锁M的同时,线程B持有锁M并尝试获得锁L,那么这两个线程将永远地等待下去。这种情况就是最简单的死锁形式(或者...原创 2020-04-13 15:24:46 · 157 阅读 · 0 评论 -
ThreadLocal讲解
文章目录ThreadLocalThreadLocal优势java.lang.ThreadLocal的具体实现小结ThreadLocal参考链接当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度看,目标变量对象是线程的本地变量,这也是类名中“Local”...原创 2020-04-13 15:26:03 · 125 阅读 · 0 评论 -
七、线程池的使用
文章目录线程池的使用1、在任务与执行策略之间的隐性耦合1、线程饥饿死锁线程池的使用本章介绍线程池的配置与调优的一些高级选项,并分析在任务执行框架时需要注意的各种危险,以及一些使用Executor的高级用法。1、在任务与执行策略之间的隐性耦合虽然Executor框架为制定、修改执行策略都提供了相当大的灵活性,但是并不是所有的任务都能适用于一般的执行策略,有些任务与执行策略之间存在隐形耦合,需...原创 2020-04-13 15:25:34 · 129 阅读 · 0 评论 -
六.1、interrupt方法的介绍
interrupt方法的引出interrupt()不能中断在运行中的线程,它只能改变中断状态而已。public class InterruptionInJava implements Runnable{ public static void main(String[] args) throws InterruptedException { Thread testTh...原创 2020-04-13 15:05:24 · 250 阅读 · 0 评论 -
六、取消与关闭
文章目录取消与关闭一、任务取消1、中断取消与关闭任务和线程的启动很容易,在大部分时候,我们都会让他们运行直到结束,或者让他们自行停止。有的时候我们希望提前结束任务或者线程,或许是因为用户取消了操作或者应用程序需要被快速关闭。要使得任务和线程能够安全、快速、可靠的停止下来,并不是一件容易的事,Java没有提供任何机制来安全地终止线程,但是它提供了中断(Interruption),这是一种协作机...原创 2020-04-13 15:05:53 · 498 阅读 · 0 评论 -
Future、FutureTask、Runnable、Callable的关系
本文借鉴了这篇文章并在此基础上加了一些其他知识点。一、Runnable1、实现该接口并重写run方法2、利用该类的对象创建线程3、线程启动时就会自动调用该对象的run方法通常在开发中结合ExecutorService使用,将任务的提交与任务的执行解耦开,同时也能更好地利用Executor提供的各种特性缺点:1.Runnable接口不能抛出异常,只能内部消化;2.Runnable接...原创 2020-04-13 15:05:11 · 154 阅读 · 0 评论 -
五、结构化并发应用程序之任务执行(Executor)
任务执行大部分并发应用程序都是围绕“任务执行”来构造的:任务通常是一些抽象的且离散的工作单元。一、在线程中执行任务当围绕“任务执行”来设计应用程序结构时,第一步就是要找出清晰的任务边界。在理想情况下,各个任务之间是相互独立的,独立性有助于实现并发。在正常的负载下,服务器应用程序应该同时表现出良好的吞吐量和快速的响应性。应用程序提供商希望程序尽可能支持多的用户,从而降低每个用户的服务成本,而...原创 2020-04-13 15:24:16 · 512 阅读 · 0 评论 -
四、并发编程实战之基础构建模块
文章目录基础构建模块一、同步容器类1、同步容器类的问题2、迭代器与ConcurrentModificationException3、隐藏迭代器二、并发容器1、ConcurrentHashMap2、CopyOnWriteList三、阻塞队列和生产者-消费者模式1、串行线程封闭2、双端队列与工作密取四、阻塞方法与中断方法interrupt方法详解五、同步工具类1、闭锁CountDownLatch的用法...原创 2020-04-13 15:05:36 · 131 阅读 · 0 评论 -
二、Java并发编程实战之对象的共享
文章目录对象的共享一、可见性(volatile可以保证可见性)1、失效数据2、非原子的64位操作3、加锁与可见性4、Volatile变量(只能保证可见性,不能保证原子性)二、发布与逸出1、发布2、逸出三、线程封闭(保证线程安全的最简单方式之一)1、Ad-hoc线程封闭2、栈封闭3、ThreadLocal类四、不变性1、final域2、使用volatile类型来发布不可变对象五、安全发布1、安全发布...原创 2020-04-13 15:04:49 · 192 阅读 · 0 评论 -
一、Java并发编程实战之线程安全性
文章目录Java并发编程实战之基础知识一、线程安全性1、定义2、无状态对象和有状态对象二、原子性1、竞态条件2、延迟初始化中的竞态条件3、复合操作(如AtomicLong)三、加锁机制1、加锁问题的引出2、内置锁3、重入锁重入锁的一种实现方法4、用锁来保护状态5、活跃性和性能Java并发编程实战之基础知识要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是共享的和可变的状态的访问。...原创 2019-12-27 21:38:31 · 272 阅读 · 1 评论