并发编程
文章平均质量分 86
java并发
ywl470812087
个人简介:深耕物联网行业,ERP,CSDN博客专家。 任职华为网联网智慧照明、空调资深工程师,并且上线投产使用,研发企业亿量级吞吐中间件。 擅长 Java语言、C语言等。
展开
-
AQS源码解读
因为此时线程A占有锁,所以current此时是线程B 与 getExclusiveOwnerThread()是线程A,并不相等,返回false。上面这段代码以上是假设B来了A刚好释放了锁,此时,突然A又来抢到了锁,这个时候current就是A线程和 getExclusiveOwnerThread()也是线程A,相等。我们可用看见这里的B和C会尝试获取锁,没有获取到就会把当前线程封装成node节点放到CLH双向队列里。A、B、C3个线程,假设A线程lock()时候拿到了锁,state被A设置成了1。原创 2022-12-25 17:34:34 · 615 阅读 · 0 评论 -
AQS 对资源的共享方式
只有当state大于0的时候,阻塞的线程才能继续执行,此时先前执行任务的线程继续执 行release方法,release方法使得state的变量会加1,那么自旋的线程便会判断成功。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障 拦截的线程才会继续干活。对于 CountDownLatch 来说,重点是“一个线程(多个线程)等待”,而其他的 N 个线程在完成“某件事情”之后,可以终止,也可以等待。原创 2022-12-24 17:50:18 · 490 阅读 · 0 评论 -
AQS学习
AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器, 比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。这是通过在取消时始终取消后续节点的标记来解决的,允许他们稳定在一个新的前任节点上,除非我们能够确定一个未被取消的前任节点将承担此责任。等待条件的线程使用相同的节点,但使用额外的链接。原创 2022-12-24 17:45:19 · 886 阅读 · 0 评论 -
多线程间共享变量线程安全问题——ThreadLocal
ThreadLocal 的作用,可以实现在同一个线程数据共享, 从而解决多线程数据安全问题.ThreadLocal 可以给当前线程关联一个数据(普通变量、 对象、 数组)set 方法 [源码!]ThreadLocal 可以像 Map 一样存取数据, key 为当前线程, get 方法每一个 ThreadLocal 对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数 据, 就需要使用多个 ThreadLocal对象实例。原创 2022-11-10 14:02:01 · 2302 阅读 · 0 评论 -
AQS基本原理
什么是AQS?AQS即AbstractQueuedSynchronizer,是一个用于构建锁和同步器的框架。它能降低构建锁和同步器的工作量,还可以避免处理多个位置上发生的竞争问题。在基于AQS构建的同步器中,只可能在一个时刻发生阻塞,从而降低上下文切换的开销,并提高吞吐量。AQS支持独占锁(exclusive)和共享锁(share)两种模式。独占锁:只能被一个线程获取到(Reentrantlock) 共享锁:可以被多个线程同时获取(CountDownLatch,ReadWriteLock).原创 2022-02-03 17:28:43 · 440 阅读 · 0 评论 -
什么是CAS机制?
什么是CAS机制?原创 2018-12-30 18:33:58 · 130978 阅读 · 0 评论 -
ReentrantReadWriteLock源码分析
ReentrantReadWriteLock源码分析原创 2022-02-03 17:43:45 · 703 阅读 · 0 评论 -
【高并发】——幂等的实现方案
一、背景我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。例如:1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次业务请求只能创建一个,创建多个就会...转载 2019-08-25 18:15:06 · 133197 阅读 · 0 评论 -
Java并发包中Semaphore的工作原理、源码分析及使用示例
简介:在多线程程序设计中有三个同步工具需要我们掌握,分别是Semaphore(信号量),countDownLatch(倒计数门闸锁),CyclicBarrier(可重用栅栏)欢迎探讨,如有错误敬请指正如需转载,请注明出处http://www.cnblogs.com/nullzx/1. 信号量Semaphore的介绍我们以一个停车场运作为例来说明信号量的作用。假设停车场只有三个...转载 2018-08-15 21:15:02 · 124722 阅读 · 1 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我...转载 2018-12-30 18:04:58 · 112847 阅读 · 0 评论 -
多线程之CountDownLatch和CyclicBarrier的区别和用法
一.CountDownLatch的使用CountDownLatch经常用于监听某些初始化操作,等初始化执行完毕后,再通知主线程继续工作。CountDownLatch定义:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await ...原创 2018-08-14 20:19:20 · 129282 阅读 · 2 评论