![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习杂记
我思故我菜
这个作者很懒,什么都没留下…
展开
-
ThreadLocal杂记
线程隔离机制 ThreadLocal原理分析 前提,每个线程都会有一个自己独有的ThreadLocalMap,由ThreadLocal来维护。 ThreadLocal的set()方法 调用set()方法的时候,1、首先通过当前线程获取到ThreadLocalMap,在Thread这个类中是没有对ThreadLocalMap进行初始化的,所以说是由ThreadLocal来维护的。2、最开始的时候,ThreadLocalMap为null,所以需要初始化。 初始化过程: 将当前ThreadLocal对象和值原创 2020-06-04 12:15:07 · 123 阅读 · 0 评论 -
线程安全之可见性杂记
public static boolean flag =false; public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(()->{ int i = 0; while (!flag){ i++; } System原创 2020-06-03 11:31:09 · 97 阅读 · 0 评论 -
线程安全杂记
使用多线程去访问共享资源,有可能会带来数据安全性问题。 线程安全性问题体现为 原子性、可见性、有序性。 i++ 非原子性操作,实际上有3个指令,取值,运算,赋值。 解决的方法:锁 synchronized(非公平锁):可以修饰方法,代码块;锁的范围:类锁、对象锁。 锁的存储:在对象头中的mark owrd,最后两位代表锁的状态,前一位为是否偏量锁。无锁(001)、偏向锁(101)、轻量级锁(00)、重量级锁(10)、GC标记(11)。 对象在内存中的布局:对象头、实例数据 锁的状态:偏向锁、轻量级锁、重量级原创 2020-06-03 11:31:42 · 116 阅读 · 0 评论 -
多线程杂记
Java中线程的生命周期有6种,操作系统层面有5种。 线程的启动start(),调用的是本地方法start0(),JVM层面实现的。JVM调操作系统创建线程,启动线程,操作系统调用run()方法,JVM调用run()方法。操作系统通过调度算法,去调度CPU执行。执行结束后,JVM对线程进行销毁。 线程的终止,线程执行结束。线程有个中断标记,默认为false,interrupt()方法改变中断标记,某些情况下可以让线程自己处理外部中断。如果线程处于阻塞状态下,interrupt()方法会唤醒线程。wait()原创 2020-06-03 11:32:00 · 115 阅读 · 0 评论