
多线程
文章平均质量分 68
荆茗Scaler
这个作者很懒,什么都没留下…
展开
-
AQS源码解析及原理总结
AQS是java中concurrent包下的Lock的实现,是AbstractQueuedSynchronizer抽象队列同步器的简称,主要作用就是来保证多线程环境下,代码的同步执行。和synchronize的作用一样,实现不一样。synchronize是操作系统级别的锁,而AbstractQueuedSynchronizer是java代码级别的锁。这篇博文主要是解析ReentrantLock下公平锁的源码,并总结器实现原理。1.调用sync的lock()方法,sync的实现有公平锁和非公平锁。.原创 2021-08-26 11:43:55 · 249 阅读 · 0 评论 -
java中volatile关键字深入理解
1.硬件层面认识CPU读写 计算机中cpu读写内存数据时,首先会读取 L1 缓存,L1 缓存中读取不到去 L2 缓存读取,读取不到再去 L3 读取,还是读取不到时,再去主内存中读取。cpu 之所以这样做,是因为 cpu 的运行速度远超主内存的读写速度,为了不让主内存的性能限制 cpu 的运行速度,所以加了三级缓存设备,在运行速度上:L1 > L2 > L3 > 主内存。寄存器属于cpu计算时的一个暂时存储中转空间。 所以多线程运行时,每个 cpu 会运行一个...原创 2021-08-20 11:24:06 · 292 阅读 · 0 评论 -
JVM深入学习-1.4 详解DCL的单例模式为什么需要加volitle?通过class加载流程中的Link阶段和初始化阶段理解为什么要加volitle
12312原创 2021-08-20 11:18:44 · 233 阅读 · 0 评论 -
多线程-sleep、yield、wait的区别
1.sleep。sleep会导致线程暂停等待需要睡眠的时间再接着执行,它不会让出cpu时间片,没有线程时间片切换的时间开销,并不能释放时间片,但是它会阻塞线程的执行。sleep中的线程会被另一个线程调用 interrupt 方法中断。yield不会。2.yield。yield方法属于一种cpu调度提示,调用yield方法时,只是告诉了cpu当前线程可以放弃cpu资源,但是它不强迫cpu资源切换,cpu如果资源充足,它可能会忽略这种提示,并不会切换线程时间片资源。意思就是说:yield的方法调用并原创 2021-08-16 14:36:24 · 1356 阅读 · 0 评论 -
多线程-线程的生命周期
线程的声明周期:1. NEWnew一个 Thread对象时,如果没有调用start时,那么new的这个对象就相当于一个普通的java对象。2. RUNNABLE当调用thread的start时,才真正的在jvm进程中创建了一个线程,但是这个线程并不一定立即执行,需要等待 CPU的调度。这个线程等待 CPU调度的状态称为RUNNABLE状态。3. RUNNING一个正在执行自己业务逻辑的线程的状态称为RUNNING状态。该状态的线程可以发生如下的状...原创 2021-08-09 11:47:00 · 133 阅读 · 0 评论 -
ThreadLocal 个人的简单理解
先看一个简单的实例:假如有两个线程 A、B 要同时先后访问 TestValue 的set(key)、getKey()方法,那么线程 A 和线程 B get出来的值可能不安全,如下示例:public class TestValue { public static String key; public static String getKey() { return key; }...原创 2019-03-07 11:46:30 · 436 阅读 · 0 评论