摘要: ThreadLocal ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。 ThreadLocal的set方法源码 /** * Sets the current thread's copy of this threa 阅读全文
posted @ 2021-02-16 16:27 January01 阅读(79) 评论(0) 推荐(0)
摘要: ReentrantLock源码 父子类关系:NonfairSync->Sync->AQS AQS源码 核心是volatile int state以及等待队列。 state的具体含义交给子类来定义。 ReentrantLock中state代表加解锁。 CountDownLatch中state代表需要c 阅读全文
posted @ 2021-02-14 11:24 January01 阅读(42) 评论(0) 推荐(0)
摘要: ReentrantLock 可重入锁(synchronized也是可重入锁) 必须手动释放锁,使用synchronized如果遇到异常会自动释放锁,但是reentrantLock必须手动释放,因此需要在finally中进行锁的释放。 可以使用tryLock进行尝试锁定,不管锁定与否,方法都将继续进行 阅读全文
posted @ 2021-02-13 16:20 January01 阅读(59) 评论(0) 推荐(0)
摘要: synchronized底层 JDK早期的实现是重量级锁(向操作系统申请锁)。 Hotspot实现(锁升级) 首先在锁的markword上记录第一个访问的线程ID,并没有上锁(偏向锁)。 如果有线程争用,升级为自旋锁。 默认旋10次之后升级为重量级锁,未获得锁的线程进入等待队列。 可参考http:/ 阅读全文
posted @ 2021-02-13 09:45 January01 阅读(49) 评论(0) 推荐(0)
摘要: 线程的历史 线程的历史是异步对于CPU性能压榨的历史。 单进程人工切换 纸带机 多进程批处理 多个任务批量执行 多进程并行处理 把程序写在不同的内存位置上来回切换 多线程 一个程序内部不同任务的来回切换 selector epoll 纤程/协程 绿色线程,用户管理的(不是OS管理的)线程 什么是进程 阅读全文
posted @ 2021-02-03 21:31 January01 阅读(21) 评论(0) 推荐(0)