![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发
文章平均质量分 87
sun_tantan
这个作者很懒,什么都没留下…
展开
-
【J.U.C-executors】执行器框架——Fork/Join模式简要概述
与ThreadPoolExecutor不同的是,ForkJoin线程池中有多个WorkerQueue任务队列,每个队列对应一个线程,执行分割好的小任务;还使用了工作窃取机制,避免某些线程的空闲。原创 2021-05-13 19:00:25 · 135 阅读 · 1 评论 -
【J.U.C-executors】执行器框架——Future模式
Future给我们提供了异步获取任务执行结果的模式,依赖于对任务维护了一系列状态。当线程调用get获取结果,但是任务未结束时,将会进入栈中被挂起。原创 2021-05-13 19:00:10 · 151 阅读 · 0 评论 -
【J.U.C-executors】执行器框架—— ThreadPoolExecutor线程池实现原理分析
本文分析了ThreadPoolExecutor线程池的实现,我们创建线程池时通过调整corePoolSize、maximumPoolSize、workQueue等待队列长度的参数,来适应不同的场景需求。原创 2021-05-07 18:29:28 · 102 阅读 · 0 评论 -
【J.U.C-executors】执行器框架——Executor接口
Executor提供了一种将Runnable任务本身与任务执行解耦的方法,我们可以不再关注线程的创建过程。原创 2021-05-01 21:59:04 · 130 阅读 · 0 评论 -
About AQS——有关AQS与其实现的同步器,自问自答系列
是时候总结一下了原创 2021-04-27 10:43:32 · 203 阅读 · 0 评论 -
【J.U.C-synchronizer】同步器框架——Semaphore信号量
Semaphore信号量,它可以控制某个共享资源被同时访问的线程个数。也实现了AQS中的共享模式,但是与CountDownLatch相反,允许多个线程同时对state++原创 2021-04-26 17:56:35 · 81 阅读 · 0 评论 -
【J.U.C-synchronizer】同步器框架——CyclicBarrier循环栅栏
CyclicBarrier循环栅栏,没有直接实现AQS中接口,而是借助ReentrantLock与Condition实现,当到达栅栏等待的线程满足一定数量时,栅栏才会放行。原创 2021-04-25 17:56:41 · 104 阅读 · 0 评论 -
【J.U.C-synchronizer】同步器框架——CountDownLatch倒数计数器
CountDownLatch是多线程环境下倒数计数器,实现了AQS中的共享模式:允许多个线程同时countDown对计数器减1、当计数器倒数到0时,唤醒所有await阻塞的线程。原创 2021-04-25 16:06:08 · 89 阅读 · 0 评论 -
【J.U.C-Locks】锁框架——Condition接口
在AQS内部实现了Condition的实现类ConditionObject。锁+Condition可以根据signal和await实现生产消费模型,这种方式比synchronize的好处在于可以实现基于不同条件的精确唤醒。原理就是每个Condition都实现了一个等待队列,这样一个对象就包含一个AQS同步队列+多个Condition等待队列。原创 2021-04-08 11:12:07 · 159 阅读 · 2 评论 -
【J.U.C-Locks】锁框架——Lock接口与ReadWriteLock接口
Lock接口是JUC的lock包中的一个接口,ReentrantLock可重入独占锁和ReadWriteLock读写锁都实现了此接口,两者都支持公平与非公平锁,与可重入。由CAS一文知这些锁在内部需要实现具体的资源获取释放的策略。原创 2021-01-26 18:55:53 · 141 阅读 · 1 评论 -
【J.U.C-Locks】锁框架——抽象队列同步器AQS实现原理
AbstractQueuedSynchronized:抽象的队列同步器。也就是说很多的同步器都是实现了这一抽象的接口,实现了其中定义的获取与释放锁的方法。它的核心思想在于一个FIFO的双向链表队列+volatile修饰的state同步状态,多个线程并发争夺state资源。原创 2021-01-19 00:47:42 · 192 阅读 · 0 评论 -
【并发编程】(二)Java并发机制底层实现原理——synchronized关键字
synchronized可以实现给对象、方法、代码块加锁。其原理可以说是在JVM层面,依赖于硬件层面的CPU指令。在jdk1.5之前,synchronized默认为是一个重量级锁,与Lock接口相比就显得尤其笨重。但是之后jdk对其进行了优化,包括了偏向锁、轻量级锁、重量级锁原创 2021-01-02 01:27:13 · 237 阅读 · 0 评论 -
【J.U.C-Collections】并发集合类与实现原理——BlockingQueue
阻塞队列通过Lock锁来实现:不满足条件时线程被阻塞,满足条件自动唤醒。接口常见的两个实现类与原理:ArrayBlockingQueue数组类型:一个lock锁+两个Condition条件+环形数组结构;LinkedBlockingQeque链表类型:两个lock锁+两个Condition条件+单向链表。原创 2020-12-17 11:47:06 · 506 阅读 · 1 评论 -
【J.U.C-Collections】并发集合类与实现原理—— ConcurrentLinkedQueue
非阻塞同步队列--ConCurrentLinkedQueue,原理为volatile类型Node节点+自旋循环CAS。通过head、tail指针(本身或next节点是否为空)判断是否有别的线程先入队出队成功。注意头尾节点的更新是延迟的,如入队每两次才定位校正一次tail,因为这样可以把一次volatile写替换为volatile读,提高效率。原创 2020-12-10 15:17:45 · 293 阅读 · 2 评论 -
【J.U.C-Collections】并发集合类与实现原理——CopyOnWriteArrayList
CopyOnWriteArrayList存储结构为volatile数组+lock锁。对元素进行写操作时先对原数组加锁,然后创建新数组,将原数组copy进去并修改,这样原数组的读不受影响。其原理就是写时复制,每次写操作都需要重新copy数组,所以适用于读多写少的情景。而且不保证实时一致性,只能保证最终一致性。原创 2020-12-03 17:26:22 · 329 阅读 · 0 评论 -
【J.U.C-Collections】并发集合类与实现原理——ConcurrentHashMap
ConcurrentHashMap实现并发安全是使用volatile关键字+CAS来保证。在put时先锁住目标index的头结点,然后通过CAS来操作。值得一提的是扩容也支持并发,当put操作发现当前table正在扩容时,此线程将加入其中,协助并发扩容。原创 2020-11-20 11:49:35 · 818 阅读 · 1 评论 -
【J.U.C-Atomic】Atomic原子类与实现原理
如果不使用原子类,要同步修改Integer等变量就需要加锁,atomic原子类就是解决这种问题。其原理概括来说就是volatile关键字/final关键字+循环CAS尝试。可以说是一种乐观锁的理念。原创 2020-09-02 01:19:56 · 579 阅读 · 0 评论 -
【并发编程】(一)Java并发机制的底层实现原理——volatile关键字
volatile实现了可见性和有序性。其可见性是基于java内存模型JMM实现的:写之后将线程的本地内存刷新到主内存,读时将本地内存的缓存置为无效;至于其有序性是通过控制编译器和处理器的指令重排序实现的:对于volatile变量的写,happends-before于对此变量的读。原创 2020-08-26 00:36:02 · 542 阅读 · 0 评论