jdk 源码分析
文章平均质量分 92
jellyfishmix 的源码分析,更新中
JellyfishMIX
qunar -- java 开发
展开
-
synchronized 的 monitor 机制
monitor 是 synchronized 中用以实现线程之间的互斥与协作的主要手段。每个 monitor 在每个时刻,只能被一个线程持有,该线程就是 activeThread,其它线程都是 waitingThread,分别在两个队列 entrySet 和 waitSet 里等候。在 entrySet 中等待的线程状态是 waiting for monitor entry,而在 wait set 中等待的线程状态是 in Object.wait()。原创 2023-04-11 16:57:04 · 1001 阅读 · 0 评论 -
无状态编程, lambda 表达式中传入的局部变量,为什么需要是不可变的(final)
本文将会根据以下顺序进行叙述:lambda 表达式中传入的局部变量,为什么需要是不可变的(final)?函数式编程提倡的无状态。无状态服务。原创 2022-10-28 22:36:12 · 1138 阅读 · 0 评论 -
LinkedBlockingQueue 源码分析
offer 方法呈现的效果: offer(E e): 表示如果可能的话,将 e 添加到 BlockingQueue 里,即如果 BlockingQueue 可以容纳,则返回 true,否则返回 false。本方法不阻塞当前执行方法。原创 2022-10-23 16:23:45 · 556 阅读 · 0 评论 -
ThreadPoolExecutor 源码分析
ThreadPoolExecutor 使用一个线程反复执行 Runnable 的方式: while 循环里反复调用 getTask 从阻塞队列里获得 Runnable, 然后执行 Runnable#run 方法,调用传入 runnable 时重写的 run 方法。原创 2022-10-23 16:21:08 · 240 阅读 · 0 评论 -
ThreadLocal 源码分析
通过 ThreadLocalMap,保证存储进去的信息,只能被当前的线程读取到,线程之间 ThreadLocal 隔离。get 方法逻辑清晰,代码中已注释,值得关注的地方是当 1. ThreadLocalMap 不存在,或者 2. key 定位到的桶位置 entry 为 null 时调用的方法 setInitialValue()ThreadLocal 主要用来存储当前上下文的变量信息,它可以保证存储进去的信息,只能被当前的线程读取到,线程之间 ThreadLocal 隔离。原创 2022-10-23 16:19:40 · 241 阅读 · 0 评论 -
CompletableFuture 源码分析(todo)
CompletableFuture 的 get() 和 getNow(T valueIfAbsent) 方法的区别:get() 会阻塞住,等待 CompletableFuture 有了 result 后才会返回。CompletableFuture 的两个 api 可以执行异步任务,supplyAsync (有返回值),runAsync (无返回值)。uniApplyStage 方法及其调用的方法,由于我的水平不足,暂未有能力解析,日后将完善。学习了 thenApply 和 thenCompose 的区别。原创 2022-10-23 16:17:34 · 295 阅读 · 0 评论 -
Optional 源码分析
Optional 的构造方法均有 private 修饰,意味着 Optional 的构造方法,只供 Optional 类内部使用。如果 optional 对象的属性 value 不为 null,则使用该 value 值作为入参,调用实现 Consumer 接口的 lambda 回调函数。有参构造方法,value 属性为传入的值,要求 value 必须不为 null,否则抛出 NullPointerException。返回一个 value 为 null 的 Optional 对象,这个对象是可变的。原创 2022-10-23 16:15:36 · 223 阅读 · 0 评论 -
ReentrantLock 源码分析
tryAcquire 方法由子类实现 if(!}AbstractQueuedSynchronizer 的 acquire 方法是一个模板方法。模板方法的定义:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。原创 2022-09-23 12:59:11 · 435 阅读 · 2 评论 -
AQS(AbstractQueuedSynchronizer) 源码分析
AQS 全称 AbstractQueuedSynchronizer,是 juc 包(java.util.concurrent)中一个同步器开发框架,用于支持上层的锁。本文逐行分析核心逻辑。原创 2022-09-23 12:56:28 · 313 阅读 · 0 评论 -
HashMap 源码逐行分析,j + oldCap 桶位置重分配公式手写验证
HashMap 核心方法,源码逐行分析,j + oldCap 桶位置重分配公式手写验证原创 2022-08-09 22:33:53 · 836 阅读 · 0 评论