转自: https://www.jianshu.com/p/d8eeb31bee5c 前言 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),内部实现 ...
分类:
其他好文 时间:
2019-05-22 15:40:55
阅读次数:
98
JUC包下的阻塞原语,所谓阻塞原语指的是JUC下所有对线程挂起的操作都是通过LockSupport来完成的。 基本操作 有点像wait notify机制,子线程调用park会被挂起,等待别的线程unpark才会接着park继续执行,且park的线程处于waiting状态。 中断 处于waiting状 ...
分类:
其他好文 时间:
2019-05-14 13:11:59
阅读次数:
122
CopyOnWriteArrayList 它相当于线程安全的ArrayList.1、使用场景:List 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。2、因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remove() 等等)的开销很大。3、迭代器 ...
分类:
其他好文 时间:
2019-05-09 10:59:14
阅读次数:
151
一、前言 最近几天忙着做点别的东西,今天终于有时间分析源码了,看源码感觉很爽,并且发现ConcurrentHashMap在JDK1.8版本与之前的版本在并发控制上存在很大的差别,很有必要进行认真的分析,下面进行源码分析。 二、ConcurrentHashMap数据结构 之前已经提及过,Concurr ...
分类:
其他好文 时间:
2019-05-05 19:22:29
阅读次数:
132
ForkJoinPool 分支/合并框架 工作窃取 Fork/Join 框架 Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总 Fork/Join 框架与线程池的区别 ? 采用 “工作窃 ...
分类:
其他好文 时间:
2019-05-02 18:50:51
阅读次数:
113
线程池 ? 第四种获取线程的方法:线程池,一个 ExecutorService,它使用可能的几个池线程之 一执行每个提交的任务,通常使用 Executors 工厂方法配置。 ? 线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在 执行大量异步任务时提供增强的性能,并且还可以提供 ...
分类:
编程语言 时间:
2019-05-02 18:45:07
阅读次数:
165
线程八锁 ? 一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用 其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻 内,只能有唯一一个线程去访问这些synchronized方法 ? 锁的是当前对象this,被锁定后,其它的线程都不 ...
分类:
编程语言 时间:
2019-05-02 15:53:51
阅读次数:
151
深入理解Object提供的阻塞和唤醒API 前提 前段时间花了大量时间去研读JUC中同步器 的源码实现,再结合很久之前看过的一篇关于 提供的等待和唤醒机制的JVM实现,发现两者有不少的关联,于是决定重新研读一下 中提供的阻塞和唤醒方法。本文阅读JDK类库源码使用的JDK版本是JDK11,因为本文内容 ...
CountDownLatch ? Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。 ? CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作 之前,它允许一个或多个线程一直等待。 ? 闭锁可以延迟线程的进度直到 ...
分类:
其他好文 时间:
2019-04-30 01:29:12
阅读次数:
161
Callable接口 ? Java 5.0 在 java.util.concurrent 提供了一个新的创建执行 线程的方式:Callable 接口 ? Callable 接口类似于 Runnable,两者都是为那些其实例可 能被另一个线程执行的类设计的。但是 Runnable 不会返 回结果,并且 ...
分类:
其他好文 时间:
2019-04-30 01:05:51
阅读次数:
127