写点什么

JUC

0 人感兴趣 · 27 次引用

  • 最新
  • 推荐
https://static001.geekbang.org/infoq/ec/ecc438c207da879511cc750011a7487e.jpeg?x-oss-process=image/resize,w_416,h_234

☕【Java 技术之旅】如何彻底认识 AQS 的原理 (上篇)

用户头像
李浩宇/Alex5 月 10 日

不知道大家喜不喜欢我新的写作风格呢,标题风格随便设计了一下,哈哈,希望给一些意见哦,

读写锁

用户头像
Geek_571bdf5 月 9 日

ReadWriteLock 读写锁

https://static001.geekbang.org/infoq/39/39f85a546a1838bf67f7c9287eae084b.jpeg?x-oss-process=image/resize,w_416,h_234

Java- 技术专题 - 多线程顺序执行的 8 种方案实现

用户头像
李浩宇/Alex4 月 27 日

本文使用了7中方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。 使用的方法如下:

https://static001.geekbang.org/infoq/39/39f85a546a1838bf67f7c9287eae084b.jpeg?x-oss-process=image/resize,w_416,h_234

Java- 技术专题 -CountDownLatch 的介绍和使用

用户头像
李浩宇/Alex4 月 18 日

CountDownLatch是在JDK1.5的时候才被引入,跟它一起被引入的工具类还有CyclicBarrier(回环栅栏)、Semaphore(信号量)、ConcurrentHashMap(并发Hash表)和BlockingQueue(阻塞队列),存在于java.util.concurrent包下(常说JUC)。接下来讲解一下这

ScheduledThreadPoolExecutor 源码解读(二)ScheduledFutureTask 时间调度执行任务(延迟执行、周期性执行)

用户头像
徐同学呀4 月 17 日

延迟阻塞队列DelayedWorkQueue中放的元素是ScheduledFutureTask,提交的任务被包装成ScheduledFutureTask放进工作队列,Woker工作线程消费工作队列中的任务,即调用ScheduledFutureTask.run(),ScheduledFutureTask又调用任务的run(),这点和ThreadPoolExecu

ScheduledThreadPoolExecutor 源码解读(一)DelayedWorkQueue 高度定制延迟阻塞优先工作队列

用户头像
徐同学呀4 月 17 日

ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,所以其内部的数据结构和ThreadPoolExecutor基本一样,并在其基础上增加了按时间调度执行任务的功能,分为延迟执行任务和周期性执行任务。

ThreadPoolExecutor 源码解读(三)如何优雅的关闭线程池(shutdown、shutdownNow、awaitTermination)

用户头像
徐同学呀4 月 17 日

学会了如何提交任务,还需要知道如何正确的关闭线程池。当关闭一个线程池时,有的工作线程还正在执行任务,有的调用者正在向线程池提交任务,并且工作队列中可能还有未执行的任务。因此,关闭过程不可能是瞬时的,而是一个平滑过渡的过程。

ThreadPoolExecutor 源码解读(二)execute 提交任务,Worker 详解。如何执行任务?如何回收空闲线程?

用户头像
徐同学呀4 月 17 日

了解了线程池基本属性的概念是远远不够的,还需要知道每一个属性在源码中的体现,比如提交任务的过程中是如何将核心线程数、工作队列、最大线程数以及拒绝策略等连起来的?工作线程是如何执行任务代码的?线程池是如何回收空闲线程的?

ThreadPoolExecutor 源码解读(一)重新认识 ThreadPoolExecutor(核心参数、生命周期、位运算、ThreadFactory、拒接策略)

用户头像
徐同学呀4 月 17 日

在Java中,创建一个线程new Thread,就像创建一个对象一样简单,但实际上创建线程远不是创建一个对象那么简单。创建对象,仅仅是在 JVM 的堆里分配一块内存而已;而创建一个线程,却需要调用操作系统内核的 API,并且要为线程分配一系列的资源,所以线程是一

FutureTask 源码解读,阻塞获取异步计算结果(阻塞、取消、装饰器、适配器、Callable)

用户头像
徐同学呀4 月 17 日

FutureTask 继承自Runnable,所以也可以实现异步执行的效果,但是和常规的异步执行方式不同,常规异步只要求异步的过程是正确的就可以了,而FutureTask不仅可以知道异步执行的状态,还可以知道异步结果。那它是如何实现的呢?

CopyOnWriteArrayList 源码解读之 CopyOnWrite 思想的利与弊

用户头像
徐同学呀4 月 17 日

CopyOnWriteArrayList作为并发容器集合,在窥探其原理之前,先想想,倘若让我们自己来开发一个并发集合,该如何设计?

https://static001.geekbang.org/infoq/03/03477d1f6b48b9d4ecde02d8f7c26adf.jpeg?x-oss-process=image/resize,w_416,h_234

关于 ReentrantReadWriteLock,首个获取读锁的线程单独记录问题讨论(firstReader 和 firstReaderHoldCount)

用户头像
徐同学呀4 月 17 日

读了ReentrantReadWriteLock的源码,知道读写锁共用一个state,低16位表示写锁的状态和重入,高16位表示读锁的状态,右移16位表示持有读锁的线程数,那么该读锁是如何记录每个线程的重入呢?

https://static001.geekbang.org/infoq/1d/1d91f32be12e8680abe959beb8fb1fc8.jpeg?x-oss-process=image/resize,w_416,h_234

ConcurrentHashMap 源码深度解析(二)(java8)直呼 Doug Lea 是真的细(带你参透扩容机制)

用户头像
徐同学呀4 月 15 日

扩容是重头戏,看过的人都说难。确实,和java7版本比起来,难度真不是一个量级的。有些细节看着莫名其妙,一想就是好几天,看似想明白也只能算是猜想合理,直呼Doug Lea的心思是真的细啊!

https://static001.geekbang.org/infoq/ad/ad9a2701680fffb207c4be3671e2c63b.jpeg?x-oss-process=image/resize,w_416,h_234

ConcurrentHashMap 源码深度解析(一)(java8)不可不知的基本概念(助你拿下源码事半功倍)

用户头像
徐同学呀4 月 15 日

ConcurrentHashMap java1.8数据结构采用数组+链表+红黑树,废弃分段锁`Segement`,进一步降低锁的粒度,可将锁直接加在数组占位节点上。

https://static001.geekbang.org/infoq/ab/ab4a0a99735373993057f1232a07c380.gif?x-oss-process=image/resize,w_416,h_234

ConcurrentHashMap 源码深度解析(java7)原来如此简单 (写的真好,建议收藏)

用户头像
徐同学呀4 月 15 日

ConcurrentHashMap算是java基础中非常基本的知识点,不仅在日常开发中经常用到,面试中也是经久不衰的话题。它基本沿用HashMap的接口定义,使得即使不了解其底层原理,也能无缝切换。

ReentrantLock 原理分析

用户头像
旺旺1 月 19 日

ReentrantLock是Java并发包中提供的一个可重入的互斥锁,掌握它是提升Java内功的必备。

大厂面试题:你知道 JUC 中的 Semaphore、CyclicBarrier、CountDownLatch 吗

用户头像
Java鱼仔1 月 14 日

资源的分配方式有两种,一种是独占,比如之前讲的ReentrantLock,另外一种是共享

面试被问 AQS、ReentrantLock 答不出来?这些知识点让我和面试官聊了半小时!

用户头像
Java鱼仔1 月 12 日

面试被问AQS、ReentrantLock答不出来?这些知识点让我和面试官聊了半小时!

https://static001.geekbang.org/infoq/ad/ad3643259a3ae328e4b767ad075c1994.jpeg?x-oss-process=image/resize,w_416,h_234

Java 中 CAS 原理分析 (volatile 和 synchronized 浅析)

用户头像
叫练2020 年 12 月 14 日

CAS英文解释是比较和交换,是cpu底层的源语,是解决共享变量原子性实现方案,它定义了三个变量,内存地址值对应V,期待值E和要修改的值U,如下图所示,这些变量都是在高速缓存中的,如果两个线程A,B分别通过cas方式同时修改共享变量,假设当A线程先获取时间

https://static001.geekbang.org/infoq/12/12bac6643fe1771e4a5290d43852ab5d.jpeg?x-oss-process=image/resize,w_416,h_234

万字图文 | 聊一聊 ReentrantLock 和 AQS 那点事(看完不会你找我)

用户头像
龙台的技术笔记2020 年 11 月 20 日

文章以 ReentrantLock 作为切入点,讲述了其公平锁和非公平锁的概念,以及对应 AQS 中 CLH、AOS 等不容易被发现的概念

https://static001.geekbang.org/infoq/71/71577b876dc0a7bd224ff185dab67396.png?x-oss-process=image/resize,w_416,h_234

写时复制集合 —— CopyOnWriteArrayList

用户头像
程序员小航2020 年 10 月 31 日

JUC 下面还有一个系列的类,都是 CopyOnWriteXXX ,意思是写时复制,这个究竟是怎么回事?那就以 CopyOnWriteArrayList 为切入点,一起了解写时复制是怎么回事?

https://static001.geekbang.org/infoq/5c/5c6487d1b379f73ba49ca2f7edf9d760.jpeg?x-oss-process=image/resize,w_416,h_234

非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue

用户头像
程序员小航2020 年 10 月 26 日

JUC 下面的相关源码继续往下阅读,这就看到了非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue,来一起看看吧。

https://static001.geekbang.org/infoq/72/725b933e3b4498d57b5da49879c40b5b.jpeg?x-oss-process=image/resize,w_416,h_234

AQS 都看完了,Condition 原理可不能少!

用户头像
程序员小航2020 年 10 月 1 日

在介绍 AQS 时,其中有一个内部类叫做 ConditionObject,当时并没有进行介绍,并且在后续阅读源码时,会发现很多地方用到了 Condition ,这时就会很诧异,这个 Condition 到底有什么作用?。

https://static001.geekbang.org/infoq/b3/b340a7c223b2f35cb09b883a15fbf970.jpeg?x-oss-process=image/resize,w_416,h_234

基于数组的有界阻塞队列 —— ArrayBlockingQueue

用户头像
程序员小航2020 年 9 月 28 日

在阅读完和 AQS 相关的锁以及同步辅助器之后,来一起阅读 JUC 下的和队列相关的源码。先从第一个开始:ArrayBlockingQueue。

https://static001.geekbang.org/infoq/a1/a11f1d3ed1b9f4731462a475ea1cde84.jpeg?x-oss-process=image/resize,w_416,h_234

使用递增计数器的线程同步工具 —— 信号量,它的原理是什么样子的?

用户头像
程序员小航2020 年 9 月 21 日

在 JUC 中线程同步器除了 CountDownLatch 和 CycleBarrier ,还有一个叫做 Semaphore (信号量),同样是基于 AQS 实现的。下面来看看信号量的内部原理。

https://static001.geekbang.org/infoq/5f/5f46c8d3e9aa5a25efed825dee1aa556.jpeg?x-oss-process=image/resize,w_416,h_234

快来看看!AQS 和 CountDownLatch 有怎么样的关系?

用户头像
程序员小航2020 年 9 月 7 日

CountDownLatch 一个同步辅助工具,同样是基于 AQS 实现,本篇文件主要是介绍 CountDownLatch 的使用,以及源码。

JUC_JUC资料文章-InfoQ写作平台