并发编程
这个分类专栏下,主要是个人学习并发编程相关知识的总结和笔记。
一页芳华
细节决定成败,技术成就梦想!
思路决定出路,行动创造未来!
展开
-
多线程原理分析
1.多线程的目的(1).在多个CPU核心下,多线程的好处是显而易见的,不然多个CPU核心只跑一个线程其他的核心就都浪费了;(2).即便不考虑多核心,在单核下,多线程也是有意义的,因为在一些操作,比如IO操作阻塞的时候,是不需要CPU参与的,这时候CPU就可以另开一个线程去做别的事情,等待IO操作完成再回到之前的线程继续执行即可.2.多线程对于共享变量访问带来的安全性问题一个对象是否是线程安...原创 2019-10-10 11:34:56 · 148 阅读 · 0 评论 -
并发工具之Semaphore
参考: https://blog.csdn.net/javazejian/article/details/761673571.semaphore 也就是我们常说的信号灯,用来控制并发时线程的数量,实现了序列化接口。通过 acquire 获取一个许可,如果没有就等待;通过 release 释放一个许可。有点类似限流的作用。Semaphore 只有3个操作:(1).初始化;Semaphore...原创 2019-10-10 16:38:40 · 286 阅读 · 0 评论 -
并发工具之CyclicBarrier
1.使用场景现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如:吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。在JUC包中为我们提供了一个同步工具类能够很好的模拟这类场景,它就是CyclicBarrier类。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的...原创 2019-10-10 16:34:13 · 99 阅读 · 0 评论 -
并发工具之CountDownLatch
1.对于 CountDownLatch,我们仅仅需要关心两个方法,一个是 countDown() 方法,另一个是 await() 方法。CountDownLatch 构造函数会接收一个 int 类型的参数作为计数器的初始值,当调用 CountDownLatch 的 countDown 方法时,这个计数器就会减一。countDown() 方法每次调用都会将 state 减 1,直到 state ...原创 2019-10-10 16:31:51 · 198 阅读 · 0 评论 -
并发工具之Condition
参考: https://blog.csdn.net/javazejian/article/details/750434221.Condition (AQS独占锁)Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒.condition 中两个最重要的方法,一个是 await,一个是 signal 方法。aw...原创 2019-10-10 16:26:02 · 220 阅读 · 0 评论 -
ArrayBlockingQueue原理分析
参考: https://www.jianshu.com/p/cc308d82cc711.构造方法一共提供了三个构造方法,最核心的是第二个构造方法(如下);第三个构造方法多了数据初始化/** * Creates an {@code ArrayBlockingQueue} with the given (fixed) * capacity and the specified access...原创 2019-10-10 16:16:07 · 151 阅读 · 0 评论 -
AQS深入分析
1.什么是AQS在 Lock 中,用到了一个同步队列 AQS,全称:AbstractQueuedSynchronizer。它能够实现线程的阻塞以及唤醒,但它并不具备业务功能。它是一个同步工具也是 Lock 用来实现线程同步的核心组件。2.AQS 的两种功能从使用层面来说,AQS 的功能分为两种:独占和共享。独占锁:每次只能有一个线程持有锁,ReentrantLock 就是以独占方式...原创 2019-10-10 16:06:12 · 280 阅读 · 1 评论 -
JMM:Java内存模型
1.什么是 JMMJMM 全称是 Java Memory Model.导致可见性问题的根本原因是缓存以及重排序。JMM 实际上就是提供了合理的禁用缓存以及禁止重排序的方法。所以它最核心的价值在于解决可见性和有序性。JMM 属于语言级别的抽象内存模型,可以简单理解为对硬件模型的抽象,它定义了共享内存中多线程程序读写操作的行为规范:在虚拟机中把共享变量存储到内存以及从内存中取出共享变量的底...原创 2019-10-10 14:55:35 · 188 阅读 · 0 评论 -
Java中的各种锁
1.公平锁和非公平锁 公平锁:多个线程按照申请锁的顺序来获取锁;(类似排队打饭,先来后到)非公平锁:多个线程并非按照申请锁的顺序,有可能后申请的线程先得到锁。(在高并发场景下,有可能会造成优先级反转或饥饿现象)实现原理:多线程场景下,如果去检查锁维护的等待队列,如果队列为空或当前线程是队列中的队首元素则获取锁,否则就会加入等待队列,按照FIFO的规则等到排队到自己再获取锁。非公平锁上来就...原创 2019-10-10 14:52:58 · 86 阅读 · 0 评论 -
JUC包下的原子操作类
1.在 J.U.C 中提供了 12 个原子操作的类。这 12 个类可以分为四大类:(1).原子更新基本类型AtomicBoolean、AtomicInteger、AtomicLong(2).原子更新数组AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray(3).原子更新引用AtomicReference、AtomicRefere...原创 2019-10-10 16:40:24 · 232 阅读 · 0 评论