![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
wb_snail
这个作者很懒,什么都没留下…
展开
-
简单明了,说说ThreadLocal内存泄漏
本文要讨论的话题是,ThreadLocal内存泄漏问题,首先,明确下我们的讨论范围,先看一个简单的使用ThreadLocal的例子:注意:存在内存泄漏风险的是我标红的new String("我是大对象")在调用完testSetGet()方法后后,内存中的引用关系如下图(实线表示强引用,虚线表示弱引用)其中new ThreadLocal对象被两个引用指向1.我们自己使用的threadLocal引用,是一个强引用2.Entry.key引用(Thread对应的ThreadLoc..原创 2020-05-14 10:55:58 · 277 阅读 · 0 评论 -
java线程模型
java线程模型:内核线程( Kernel-Level Thread,KLT) 就是直接由操作系统内核( Kernel, 下称内核) 支持的线程, 这种线程由内核来完成线程切换, 内核通过操纵调度器( Scheduler) 对线程进行调度, 并负责将线程的任务映射到各个处理器上。 每个内核线程可以视为内核的一个分身,这样操作系统就有能力同时处理多件事情, 支持多线程的内核就叫做多线程内核( Mul...原创 2018-06-19 21:50:24 · 2093 阅读 · 0 评论 -
线程安全、乐观锁和悲观锁那点事
线程安全的方案:保证线程安全无非就三种方式1.悲观锁同步,多线程挨个访问共享数据;2.乐观锁控制+重试机制确保在更新数据时预期值和实际值一致,不一致则执行重试;3.无锁方式,有些场景比较适合采用无锁方案,每个线程持有一份数据副本,互不干涉下面详细介绍每种方案:同步方案:保证共享变量在某一时刻只能被一个线程访问sychronzied:在其修饰的代码块被编译后,代码块前后会加上...原创 2018-06-20 13:46:05 · 2034 阅读 · 0 评论 -
AQS深度剖析
1、引言在JDK1.5之前,一般是靠synchronized关键字来实现线程对共享变量的互斥访问。synchronized是在字节码上加指令,依赖于底层操作系统的Mutex Lock实现。而从JDK1.5以后java界的一位大神—— Doug Lea 开发了AbstractQueuedSynchronizer(AQS)组件,使用原生java代码实现了synchronized语义。换句话说,...转载 2018-07-21 09:59:34 · 324 阅读 · 0 评论