juc
抠脚码农
一起抠脚
展开
-
Java并发编程之AQS源码分析
一、简介AQS就是AbstractQueuedSynchronizer,它是为实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等)提供的一个框架。AQS继承了AbstractOwnableSynchronizer类,这个类为创建锁和相关同步器提供了基础。AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock、Sema...原创 2019-04-15 23:51:21 · 1868 阅读 · 0 评论 -
JUC-Condition使用以及Condition原理分析
1. 线程通信ps:要想理解Condition原理,需要先了解AQS,不了解AQS的可以看先之前的文章->aqs源码解析在Synchronized加锁状态时,是使用wait/notify/notifyAll进行线程间的通信。那么在使用ReentrantLock加锁时,是如何实现线程间通信问题的呢?在JUC中既然提供了Lock,也提供了用作其线程间通信的方式,再次引入了Condition。...原创 2019-05-24 22:03:01 · 3046 阅读 · 1 评论 -
JUC-ReentrantLock源码分析
1. ReentrantLock定义PS:要想理解ReentrantLock原理,需要先了解AQS,不了解AQS的可以看先之前的文章->aqs源码解析ReentrantLock是jdk提供的可中断, 可重入获取, 支持超时, 支持尝试获取锁。它与synchronized锁主要有以下几点不同之处:可重入, 一个线程获取独占锁后, 可多次获取, 多次释放(synchronized也一样,...原创 2019-05-23 23:17:31 · 403 阅读 · 0 评论 -
juc-CountDownLatch原理分析
CountDownLatch是java.util.concurrent包下一个同步工具类,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。它能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁...原创 2019-05-29 22:44:51 · 390 阅读 · 0 评论 -
JUC-Semaphore使用及原理分析
1 Semaphore简介及使用ps:要想理解Semaphore原理,需要先了解AQS,不了解AQS的可以看先之前的文章->aqs源码解析Semaphore类是一个计数信号量,必须由获取它的线程释放,底层是基于AQS实现的,通常用于限制可以访问某些资源(物理或逻辑的)线程数目。举个例子,某个停车场总共有5个停车位,意味着同一时刻最多只能容纳5辆车,先来的5辆车占了车位之后,其他的车只能...原创 2019-05-29 23:15:07 · 376 阅读 · 0 评论