很细系列
纯源码分析,超级枯燥无聊系列
Onstudy
记录学习历程,分享心得体会
展开
-
源码分析ThreadLocal
ThreadLocal是一种变量类型,根据当前的线程,变量的value也会不一样,也可以理解成每个线程内都有一个变量的副本,很多人说ThreadLocal就是一个key为线程的map,看了下源码,我是这样理解的(可以看下jdk8的官方文档 https://docs.oracle.com/javase/8/docs/api/index.html) public class ThreadLocal<T> { public T get() {...} public void set原创 2020-07-16 16:28:15 · 593 阅读 · 0 评论 -
Java IO模型(一)
本篇博客分析Java中BIO NIO AIO和Netty模型 先来理解几个概念,同步与异步,阻塞与非阻塞 依然是烧水的例子,A去烧水,等待水开过程中A什么都不做,只等待,那就是阻塞;可以干别的,那就是非阻塞;水开之后,是否还是A来操作?依然是A操作,同步;换了B来操作,异步。 1.BIO Blocking-IO BIO是阻塞的,它的阻塞体现在很多地方 例如下面的accept p...原创 2020-04-04 19:56:19 · 161 阅读 · 0 评论 -
ReentrantLock源码解析(一)
本篇博客深入源码分析 ReentrantLock 加锁过程 ReentrantLock可以实例化两种锁,FairSync和NonfairSync ReentrantLock lock = new ReentrantLock(true); lock.lock(); 本篇以公平锁为例 ReentrantLock.java final void lock() { acquire...原创 2020-04-02 01:21:31 · 1128 阅读 · 0 评论 -
ReentrantLock源码解析(二)
本篇博客深入源码分析 ReentrantLock 解锁过程 解锁相对于加锁,没有很复杂,这里要结合加锁时的阻塞位置,完整整个流程 public void unlock() { sync.release(1); } lock中的state记录锁的状态,加锁或者重入 state+1,那么解锁就是-1;所以整个解锁过程会有两种情况,state=1和state>1 重入 ...原创 2020-04-02 18:26:23 · 238 阅读 · 0 评论