线程间的同步与通信(8)——Semaphore源码分析

2018-09-27
阅读 9 分钟
4.8k
Semaphore(信号量)也是常用的并发工具之一,它常常用于流量控制。通常情况下,公共的资源常常是有限的,例如数据库的连接数。使用Semaphore可以帮助我们有效的管理这些有限资源的使用。

线程间的同步与通信(7)——CyclicBarrier源码分析

2018-09-26
阅读 10 分钟
4.8k
在CountDownLatch中,执行countDown方法的线程和执行await方法的线程不是一类线程。例如,线程M,N需要等待线程A,B,C,D,E执行完成后才能继续往下执行,则线程A,B,C,D,E执行完成后都将调用countDown方法,使得最后count变为了0,最后一个将count值减为0的线程调用的tryReleaseShared方法会成功返回true,从而调用doReleas...

线程间的同步与通信(6)——CountDownLatch源码分析

2018-09-25
阅读 8 分钟
7.2k
CountDownLatch是一个很有用的工具,latch是门闩的意思,该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景。例如,小组早上开会,只有等所有人到齐了才能开;再如,游乐园里的过山车,一次可以坐10个人,为了节约成本,通常是等够10个人了才开。CountDown是倒数计数,所以CountDownLatch的用法通常...

线程间的同步与通信(5)——ReentrantLock源码分析

2018-09-24
阅读 13 分钟
5.5k
上一篇 我们学习了lock接口,本篇我们就以ReentrantLock为例,学习一下Lock锁的基本的实现。我们先来看看Lock接口中的方法与ReentrantLock对其实现的对照表:

Thread类源码解读(2)——线程状态及常用方法

2018-08-17
阅读 15 分钟
6.6k
前言 系列文章目录 上一篇我们讨论了线程的创建,本篇我们来聊一聊线程的状态转换以及常用的几个比较重要的方法。 本篇依然是通过源码分析来了解这些知识。 本文源码基于jdk1.8 。 阅读完本文,你应当有能力回答以下常见面试题: 线程有哪几种状态以及各种状态之间的转换? Thread.sleep() 与 Thread.currentThread().sl...

线程间的同步与通信(3)——浅析synchronized的实现原理

2018-08-15
阅读 4 分钟
7.7k
前言 系列文章目录 前面两篇文章我们介绍了synchronized同步代码块以及wait和notify机制,大致知道了这些关键字和方法是干什么的,以及怎么用。 但是,知其然,并不知其所以然。 例如: 什么是监视器锁? JAVA中任何对象都可以作为锁,那么锁信息是怎么被记录和存储的? 监视器锁是怎样被获取的? 监视器锁是怎样被释放的...

线程间的同步与通信(2)——wait, notify, notifyAll

2018-08-14
阅读 12 分钟
5.8k
前言 上一篇文章我们讲了java的同步代码块, 这一篇我们来看看同步代码块之间的协作与通信. 阅读本篇前你需要知道什么是同步代码块, 什么是监视器锁, 还不是很了解的同学建议先去看一看上一篇文章. 本文的源码基于JDK1.8 系列文章目录 概述 在Java中, 我们可以使用 wait() wait(long timeout) wait(long timeout, int nan...

线程间的同步与通信(1)——同步代码块Synchronized

2018-08-12
阅读 7 分钟
8.3k
同步代码块(Synchronized Block) 是java中最基础的实现线程间的同步与通信的机制之一,本篇我们将对同步代码块以及监视器锁的概念进行讨论。