Technology Java并发编程之9——如何理解Condtion 在理解Condition之前首先要明白两个概念: 等待队列:等待获取锁的线程构成的队列,称为等待队列 条件队列:已经获取到锁的线程由于某种原因释放了锁,等待signal信号,而构成的队列称为条件队列 2021-11-29 Views(1,533) Comments(0) ReadMore
Technology Java并发编程之8——AQS如何实现Semaphore Semaphore的实现和ReentrantLock的实现很相似,都有公平和非公平两种实现。本文的分析可以对比 LOCK源码分析 和 CountDownLatch源码分析 对比看。这样可以看出AQS的几条关键执行路径。 2021-11-29 Views(1,501) Comments(0) ReadMore
Technology Java并发编程之6——AQS如何实现CountDownLatch 前面写过一篇文章AQS源码分析的时候介绍过AQS是java并发编程的基础,Java并发包下面提供的同步工具类基本上都是以AQS构建的,一个同步类的实现主要分为三步: 该同步工具类 ,定义内部类实现AQS 定义该内部类的构造方法设置同步状态 实现tryAcquire/tryRelease方法 2021-11-29 Views(1,430) Comments(0) ReadMore
Technology Java并发编程之5——AQS-AbstractQueuedSynchronizer-源码分析 AbstractQueudSynchronizer(AQS)是道格李java并发编程的基础,内部主要包括Node和ConditionObject两个内部类,基于Node节点构建了一个FIFO队列,用来存储等待锁的线程的队列。基于ConditionObject节点也构造了一个FIFO队列,用于存储因为某种原因已经获取到锁而又主动释放锁的线程的队列。在concurrent包下面的大部分的工具类都是以他 2021-11-29 Views(1,390) Comments(0) ReadMore
Technology Java并发编程之4——Java锁分解锁分段技术 并发编程的所有问题,最后都转换成了,“有状态bean”的状态的同步与互斥修改问题。而最后提出的解决“有状态bean”的同步与互斥修改问题的方案是为所有修改这个状态的方法都加上锁,这样也就可以保证他们在修改bean的状态的时候是顺序进行的。但是这样整个过程的瓶颈也就是被加锁的这段代码。由此就产生了很多对程序加锁的优化思想,从整体上来看,可以分为两个部分:对单个锁的算法的优化。和对锁粒度的细分 2021-11-29 Views(975) Comments(0) ReadMore
Technology Java并发编程之3——Java锁的分析 在java虚拟机上面每个对象和类在逻辑上面都是和一个监视器相关联的,对于对象来说,监视器保护的是对象的实例变量,对于类来说,监视器保护的是类的类变量,为了实现监视器的排他能力,JVM为每个对象分配一个锁(称为内置锁),任何时候只有一个线程可以获得这个锁,当前线程访问实例对象不需要重新获取锁(锁的重入,在后面会介绍), 当只有一个线程获取到该对象的锁之后,在他释放这个锁之前其他线程只能等待。 2021-11-29 Views(1,308) Comments(0) ReadMore
Technology Java并发编程之2——同步工具类 CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore 为了简化线程同步与互斥的相关操作JDK,提供了大约4中同步与互斥的工具类: 闭锁(CountDownLatch),栅栏(CyclicBarrier),阻塞队列(BlockingQueue),信号量(semaphore)。本文将对比分析四种同步工具类的使用范例,和应用场景。 2021-11-29 Views(1,446) Comments(0) ReadMore
Technology java并发编程之1——synchronized和volatile 总的来说synchronized主要是解决线程互斥性问题,volatitle主要是解决线程可见性的问题 2021-11-28 Views(1,443) Comments(0) ReadMore