管程和信号量这两个同步原语在 Java 语言中的实现,理论上用这两个同步原语中任何一个都可以解决所有的并发问题。那 Java SDK 并发包里为什么还有很多其他的工具类呢?原因很简单:分场景优化性能,提升易用性。 其中有个非常普遍的并发场景:读多写少场景。实际工作中,为了优化性能,我们经常会使用缓存 ...
分类:
其他好文 时间:
2019-10-25 13:42:22
阅读次数:
119
1.CountDownLatchCountDownLatch.wait()会使当前线程阻塞,直到CountDownLatch中的计数器递减完毕后继续执行。publicclassCountDownLatchDemo{privatefinalstaticLoggerlog=Logger.getLogger(AtomicIntegerCyclicBarrierDemo.class);publicstat
分类:
编程语言 时间:
2019-10-24 19:31:34
阅读次数:
66
1. 异步任务执行服务是什么意思?答:线程 Thread 既表示要执行的任务(run() 方法),又表示执行的机制(start() 方法)。Java 并发包提供了一套框架,大大简化了执行异步任务所需的开发,这套框架引入了一个“执行服务”的概念。执行服务将任务的提交和任务的执行相分离,“执行服务”封装... ...
分类:
编程语言 时间:
2019-10-09 10:51:48
阅读次数:
557
ConcurrentLinkedQueue ConcurrentLinkedQueue内部的队列使用带头节点的单向链表实现,并且维持头尾两个指针,头指针出队、尾指针入队。该队列的出队入队操作都是线程安全的。 保证安全的方式 对于头尾指针均使用volatile关键字修饰从而保证可见性,对于头尾指针的修 ...
分类:
编程语言 时间:
2019-10-07 11:19:57
阅读次数:
78
显式锁-Lock与ReadWriteLockJDK针对Lock的主要实现是ReentrantLock,ReadWriteLock实现是ReentrantReadWriteLock。本文主要介绍ReentrantLock。 ReentrantReadWriteLock两把锁共享一个等待队列,两把锁的状 ...
分类:
其他好文 时间:
2019-10-04 09:51:30
阅读次数:
66
ghuan1993A 基本语法 多态 final static 序列化 String 集合 hasCode 泛型 内部类 自定义注解 设计模式 Jdk 多线程 CAS volatile ThreadLocal 线程池 JUC并发包 锁 synchronized ReentrantLock Maven ...
分类:
编程语言 时间:
2019-10-04 09:20:29
阅读次数:
88
第一.CountDownLatch 让一些线程阻塞知道另外一个线程完成一系列操作后才被唤醒CountDownLatch主要有2个方法,当一个或多个线程调用await方法时,调用线程会被阻塞。当其他线程调用countDown方法会将计数器减一(调用countDown方法的线程不会阻塞), 当计数器的值 ...
分类:
其他好文 时间:
2019-09-22 21:57:22
阅读次数:
118
synchronized / Lock 1.JDK 1.5之前,Java通过synchronized关键字来实现锁功能 synchronized是JVM实现的内置锁,锁的获取和释放都是由JVM隐式实现的 2.JDK 1.5,并发包中新增了Lock接口来实现锁功能 提供了与synchronized类似 ...
分类:
编程语言 时间:
2019-09-21 16:58:38
阅读次数:
67
LockSupport 和 CAS 是 Java 并发包中很多并发工具控制机制的基础,它们底层其实都是依赖 Unsafe 实现。 LockSupport 提供 park() 和 unpark() 方法实现阻塞线程和解除线程阻塞。 每个使用 LockSupport 的线程都会与一个许可(permit) ...
分类:
编程语言 时间:
2019-09-18 01:02:40
阅读次数:
101
J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来剖析一些经典的比较常用的组件的设计思想。 Lock Lock ...
分类:
其他好文 时间:
2019-09-09 22:48:25
阅读次数:
130