前言 谈到线程同步与通信,线程本身的概念是绕不开的,而进程和线程的概念已经是老生常谈的话题了,一些基本的概念本文就不再讨论了,本篇仅仅致力于通过源码,了解线程的构造与启动,从而更深入的了解线程。 本文源码基于jdk1.8…
分类:Java多线程
Thread类源码解读(2)——线程状态及常用方法
前言 上一篇我们讨论了线程的创建,本篇我们来聊一聊线程的状态转换以及常用的几个比较重要的方法。 本篇依然是通过源码分析来了解这些知识。 本文源码基于jdk1.8 。 阅读完本文,你应当有能力回答以下常见面试题: 线程有哪…
Thread类源码解读(3)——线程中断interrupt
前言 线程中断是一个很重要的概念,通常,取消一个任务的执行,最好的,同时也是最合理的方法,就是通过中断。 本篇我们主要还是通过源码分析来看看中断的概念。 本文的源码基于JDK1.8 Interrupt status &a…
逐行分析AQS源码(1)——独占锁的获取
前言 AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。 AQS虽然…
逐行分析AQS源码(2)——独占锁的释放
前言 上一篇文章 我们逐行分析了独占锁的获取操作, 本篇文章我们来看看独占锁的释放。如果前面的锁的获取流程你已经趟过一遍了, 那锁的释放部分就很简单了, 这篇文章我们直接开始看源码. 开始之前先提一句, JAVA的内置锁…
逐行分析AQS源码(3)——共享锁的获取与释放
前言 前面两篇我们以ReentrantLock为例了解了AQS独占锁的获取与释放,本篇我们来看看共享锁。由于AQS对于共享锁与独占锁的实现框架比较类似,因此如果你搞定了前面的独占锁模式,则共享锁也就很容易弄懂了。 共享锁…
逐行分析AQS源码(4)——Condition接口实现
前言 本篇文章是基于线程间的同步与通信(4)——Lock 和 Condtion 这篇文章写的,在那篇文章中,我们分析了Condition接口所定义的方法,本篇我们就来看看AQS对于Condition接口的这些接口方法的具…
线程间的同步与通信(1)——同步代码块Synchronized
前言 同步代码块(Synchronized Block) 是java中最基础的实现线程间的同步与通信的机制之一,本篇我们将对同步代码块以及监视器锁的概念进行讨论。 什么是同步代码块(Synchronized Block)…
线程间的同步与通信(2)——wait, notify, notifyAll
前言 上一篇文章我们讲了java的同步代码块, 这一篇我们来看看同步代码块之间的协作与通信. 阅读本篇前你需要知道什么是同步代码块, 什么是监视器锁, 还不是很了解的同学建议先去看一看上一篇文章. 本文的源码基于JDK1…
线程间的同步与通信(3)——浅析synchronized的实现原理
前言 前面两篇文章我们介绍了synchronized同步代码块以及wait和notify机制,大致知道了这些关键字和方法是干什么的,以及怎么用。 但是,知其然,并不知其所以然。 例如: 什么是监视器锁? JAVA中任何对…
线程间的同步与通信(4)——Lock 和 Condtion
前言 前面几篇我们学习了synchronized同步代码块,了解了java的内置锁,并学习了监视器锁的wait/notify机制。在大多数情况下,内置锁都能很好的工作,但它在功能上存在一些局限性,例如无法实现非阻塞结构的…
线程间的同步与通信(5)——ReentrantLock源码分析
前言 上一篇 我们学习了lock接口,本篇我们就以ReentrantLock为例,学习一下Lock锁的基本的实现。我们先来看看Lock接口中的方法与ReentrantLock对其实现的对照表: Lock 接口 Reent…
线程间的同步与通信(6)——CountDownLatch源码分析
前言 CountDownLatch是一个很有用的工具,latch是门闩的意思,该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景。例如,小组早上开会,只有等所有人到齐了才能开;再如,游乐园里的过山车,一次…
线程间的同步与通信(7)——CyclicBarrier源码分析
前言 上一篇 我们学习了基于AQS共享锁实现的CountDownLatch,本篇我们来看看另一个和它比较像的并发工具CyclicBarrier。 与CountdownLatch的区别 将count值递减的线程 在Coun…
线程间的同步与通信(8)——Semaphore源码分析
前言 Semaphore(信号量)也是常用的并发工具之一,它常常用于流量控制。通常情况下,公共的资源常常是有限的,例如数据库的连接数。使用Semaphore可以帮助我们有效的管理这些有限资源的使用。 Semaphore的…