并发编程
文章平均质量分 94
线程及并发
csdn_binger
这个作者很懒,什么都没留下…
展开
-
AQS的应用:可重入锁和读写锁
一、Lock接口1、Lock Lock跟Synchronized一样,都是用在多线程中用来控制并发,保证共享资源安全的一种同步机制。Synchronized是隐式的加锁/解锁;而Lock是显示的加锁/解锁,也就是说我们使用的时候需要先lock.lock()锁定资源,执行逻辑,用完后在lock.unlock()释放资源。2、特性 Lock有Synchronized没有的特性,这几个特性使我们在开发中更方便灵活 1、非阻塞性获取同步状态。tryLock方法可以立即返回是否获取到同步状态,先尝试原创 2020-10-11 17:49:04 · 316 阅读 · 0 评论 -
AQS 队列同步器
一、队列同步器AQS AQS是一个为满足同步需求、保障线程安全,构建锁或者其他同步组件的框架或者叫模板、底层实现。我们用它可以实现我们自己像要的同步组件(就像ReentrantLock)。AQS是一个抽象类,使用者需要自定义一个同步器并且继承它,重写它指定的方法(独占式/共享式获取/释放同步状态方法),再将自定义同步器组合在自己定义的同步组件中,当真正用的时候同步组件调自定义同步器的模板方法,模板方法再调我们重写的方法,从设计模式角度来看这是一个很典型的【模板模式】它与锁的区别:锁是应用层,是原创 2020-10-11 17:48:30 · 215 阅读 · 0 评论 -
synchronized
一、用法synchronized可以用来锁方法和锁代码块。锁方法又可以分成对象锁和类锁,synchronized加在普通方法上就是锁得是当前对象;加在static 的方法上锁的是当前类。锁代码块也可以分成对象锁和类锁,在方法中使用synchronized(object)手动指定锁的对象;synchronized(object.class)锁的是类。类锁跟对象没关系。public class SynchronizedCreat { Object object = new Object();//原创 2020-09-19 18:33:29 · 274 阅读 · 0 评论 -
volatile
一、内存模型1、关于内存 CPU处理速度很快,但它数据来源于内存,cpu向内存拿数据的这个过程是相对耗时的,这就会造成cpu资源浪费,为了解决这一问题,现在的处理器一般在cpu与内存之间建立多级缓存,一级缓存在cpu里也叫寄存器(高速缓存),当他处理数据时先从寄存器拿,拿不到再去内存里取。目前计算机大部分都是多核cpu,每个cpu都有自己的寄存器,但他们共享内存,当一个cpu改变了他自己缓存里的值并同步到内存后,其他cpu缓存里的值不是最新的,跟内存值不一样,这就是缓存一致性问题。 Jav原创 2020-09-13 16:49:13 · 176 阅读 · 0 评论 -
Thread 线程
Java天生就是多线程,一个请求过来就可以理解成是一个线程,线程有自己独享的虚拟机栈、本地方法栈、程序计数器,也跟其他线程共享堆内存和方法区。一个新线程的空间是由它的父线程分配的,属性也是随父线程的属性设置。一、创建1、继承Thread类;2、实现Runnable接口3、利用FutureTask 配合传入Callable创建有返回值的线程4、拉姆达表达式创建5、利用线程池二、状态jdk里的线程共有6种状态。一个线程同一时刻只能处于一种状态状态转换:1、刚new出来就是新建状态,调用s原创 2020-09-09 08:38:28 · 315 阅读 · 0 评论 -
ThreadLocal 原理、源码、内存泄漏
一、ThreadLocal1、ThreadLocal是线程内部一个成员变量,它只属于当前线程,对其他线程不可见。2、线程维护的是ThreadLocal的副本变量,每个线程操作自己的副本变量互不影响,所以不用考虑线程安全性问题。3、简单的理解就是同一个ThreadLocal在不同的线程里调用get()方法得到的value不一样。4、它实现的是同一个线程间的数据共享(隔离的是线程); 锁实现的是不同线程间的数据共享二、应用场景一个我们接触多,容易理解,最可能用到的场景:定义一个成员变量Th原创 2020-08-31 17:11:49 · 156 阅读 · 0 评论