锁
EmineWang
计算机专业,资深java开发工程师,从事后端开发、架构方向,热爱技术,热爱分享,愿对你有所帮助,感恩大家的支持,欢迎来信交流~~
展开
-
condition实现生产者和消费者
生产者import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;public class ConditionProducer implements Runnable { private Lock lock; private Condition condition; p原创 2020-08-25 16:58:50 · 1175 阅读 · 0 评论 -
wait/notify,notifyAll
wait之后,持有对象锁的线程 A会释放当前锁,释放 cpu 资源进入waiting状态.notify :表示持有对象锁的线程A 会释放当前锁,通知JVM唤醒某个竞争改对象锁线程的线程X,线程A的Synchronized代码块执行完并释放了锁之后,线程X获得对象锁的权限,其他竞争线程继续等待。(即使线程X执行完毕,释放了对象锁,其他竞争线程仍然等待,直至有新的notify或者notify...原创 2019-12-02 17:23:54 · 171 阅读 · 0 评论 -
AQS实现原理看这一篇就够了
在上一篇中我们讲解了synchronized,在jdk1.6之前,synchronized这个重量级锁性能一直较为低下,在1.6之后,进行了大量的锁的优化,如偏向锁、自旋锁等,但是与Lock相比,synchronized还是存在一下缺陷,缺少了获取锁和释放锁的可操作性,可中断、超时获取锁,且他为独占式在高并发场景下性能大大折扣。使用Lock必然离不开核心组件AQS什么是AQSAQS(AbstractQueuedSynchronizer),即队列同步器,它是构建锁或者其他同步组件的基础框架,如Reent原创 2020-08-18 18:00:29 · 3757 阅读 · 8 评论 -
锁对象、偏向锁、轻量级锁、重量级锁
锁对象在java中任何一个对象都能成为锁对象,java对象在内存中的存储结构主要有以下三个部分:1、对象头2、实例数据3、填充数据对象头的数据主要是一些运行时的数据,其简单结构如下长度内存说明32/64bitmark wordhashcode,GC分代年龄,锁信息32/64bitclass metadata address指向对象类型数据的指针32/64bitarray Length数组的长度(当对象为数组时候)从上面可以看出锁的信息是存储在对原创 2020-08-06 16:12:49 · 704 阅读 · 0 评论