
JUC
程序员架构师13
呆呆的
展开
-
JUC(一) 基本概念
1.并行的世界并行在图像处理和服务端程序中有着广泛的应用2.你必须知道的几个概念同步: 买空调,买完之后在商店等待,知道商家把你和空调一起送回家,愉快的结束了异步: 买空调,在网上下单,支付完成后,对你来说整个的过程便已经结束了,虽然没收到货但是你的任务完成了,剩下的时候你就等待收获即可以了 这期间你想干什么就干什么并发:偏重与多个任务交替执行,而多个任务有可能还是串行的,...原创 2019-07-24 17:55:10 · 1539 阅读 · 0 评论 -
JUC(十二) 同步器
ReentrantLock 讲解1.可重入 – 单线程可以重复进入但是要重复退出2.可中断 – lockInterruptibly()3.可限时 – 超时不能获得锁,就返回false,不会永久等待构成死锁重入性原理:加入锁代码逻辑:释放锁代码逻辑:/reentrantlock/ReenTrantLock12.可中断 /reentrantlock/ReenTrantLock2...原创 2019-07-25 08:54:27 · 491 阅读 · 0 评论 -
JUC(十一) ConcurrentHashMap讲解
ConcurrentHashMap讲解https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/ 未更新https://juejin.im/post/5a27c6946fb9a04509096248 红黑树 二叉树一般线程池的使用,往往都是使用这个接口ExecutorService executor = Execut...原创 2019-07-25 08:45:23 · 154 阅读 · 0 评论 -
JUC(十) 线程池
线程池精讲线程池各类的关系:Executors -- new ThreadPoolExecutorThreadPoolExecutor extends AbstractExecutorServiceAbstractExecutorService(抽象类) implements ExecutorServiceinterface ExecutorService extends ...原创 2019-07-25 08:32:51 · 103 阅读 · 0 评论 -
JUC(九)ReentrantReadWriteLock(读写锁)原理解析
我们讲到了ReentrantLock(重入锁),接下来我们讲ReentrantReadWriteLock(读写锁),该锁具备重入锁的可重入性、可中断获取锁等特征,但是与ReentrantLock不一样的是,在ReentrantReadWriteLock中,维护了一对锁,一个读锁一个写锁,而读写锁在同一时刻允许多个读线程访问。但是在写线程访问时,所有的读线程和其他的写线程均被阻塞。在具体了解Re...原创 2019-07-25 08:22:20 · 368 阅读 · 0 评论 -
JUC(八)ReentrantLock 源码解析
Lock简介Lock 接口实现类提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition (Condition实现类ConditonObject来实现线程的通知/与唤醒机制,关于Condition后期会进行介绍)对象。锁是用于控制多线程访问共享资源的工具。通常,锁提供对共享资源的独占访...原创 2019-07-24 21:12:17 · 161 阅读 · 0 评论 -
JUC(七) 并发编程锁机制,原子类的实现
concurrent包的设计要了解Java为我们提供的基于Lock接口(以及相关实现类)实现的锁功能,我们首先要看一下整个concurrent包下的设计。具体设计如下所示:在上图中,我们大致可以看出courrent包下的整体结构。整个包大致分为了三层。高层:Lock、同步器、阻塞队列等。 中层:AQS(AbstractQueuedSynchronizer)、非阻塞数据...原创 2019-07-24 21:08:05 · 206 阅读 · 0 评论 -
JUC(六) 线程安全synchronized 源码解读
线程安全的问题线程安全的定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。在具体讲解synchronized之前,我们需要了解一下什么是线程安全,为什么会出现线程线程不安全的问题。请看下列代码:class ThreadNotSafeDemo {...原创 2019-07-24 21:05:41 · 196 阅读 · 0 评论 -
JUC(五)锁机制之LockSupport工具和Condition接口
AQS的内部结构,与其独占式与共享式获取同步状态的实现。但是并没有详细描述线程是如何进行阻塞与唤醒的。我也提到了线程的这些操作都与LockSupport工具类有关。现在我们就一起来探讨一下该类的具体实现。LockSupport类了解线程的阻塞和唤醒,我们需要查看LockSupport类。具体代码如下:public class LockSupport { private Loc...原创 2019-07-24 20:42:34 · 372 阅读 · 0 评论 -
JUC(四)CAS和AQS概念
什么是CAS ?CAS 是 compareAndSwap的缩写 比较交换 类似于java中的乐观锁乐观锁与悲观所的区别在于 – 乐观锁趋向于不加锁来处理资源比如给记录加入version这种方法 记录版本号 他将内存地址的内容和定值相比较只有在相同的情况下,才会更新期望值如果已经被另一个线程操作更新则更新失败 ! 会返回boolean来判断CAS的底层原理 ??底层大部分都是有unsa...原创 2019-07-24 19:54:07 · 1827 阅读 · 0 评论 -
JUC(三) java内存模型,volatile关键字
java 内存模型JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量(volatile变量仍然有工作内存的拷贝,但是由于它特殊的操作顺序性规定,所以看起来如同直接在主内...原创 2019-07-24 18:16:43 · 204 阅读 · 0 评论 -
JUC(二) 什么是进程和线程
第一阶段 基础阶段1.什么是线程 什么是进程??进程是资源分配的最小单位,线程是cpu调度的最小单位进程就好比工厂的车间,他代表着CPU所能执行的任务单元,任意时刻CPU总是运行着一个进程,其他进程处于非运行状态!线程就好比车间内的工人,一个车间内可以有许多的工人,他们共同完成一个工作,一个进程可以包括多个线程车间内的空间是工人们共享的,比如许多房间是每个工人都可以进出的,这象征着一个进...原创 2019-07-24 18:05:21 · 240 阅读 · 0 评论 -
JUC(十三) controllers 相关集合的使用
quereConcurrentLinkedQueue(队列)定义:一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQueue ...原创 2019-07-25 22:19:38 · 151 阅读 · 0 评论