JUC
文章平均质量分 82
逆流丶石头
这个作者很懒,什么都没留下…
展开
-
JUC多并发编程 StampedLock
【代码】JUC多并发编程 StampedLock。原创 2023-05-06 14:07:09 · 410 阅读 · 0 评论 -
JUC多并发编程 读写锁
一个资源能够被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。读写互斥,读读共享。将写入锁降级为读锁,重入锁允许再获取写锁之后,可再获取读锁。原创 2023-05-06 12:35:40 · 83 阅读 · 0 评论 -
JUC多并发编程 AQS
基础解释:锁和同步器的关系:同步器的作用:AQS类图:AQS 自身:Node 内部类:ReentrantLock: acquire: addWaiter 入队: acquireQueued: cancelAcquire: unlock: unparkSuccessor: 总结原创 2023-05-06 10:16:00 · 709 阅读 · 0 评论 -
JUC多并发编程 Synchronized与锁升级
在无锁状态下,Mark Word 中可以存储对象的 identity hash code 值。当对象的 hashCode() 方法第一次被调用时,JVM 会生成对应的 identity hash code 值并将该值存储在 Mark Word中对于偏向锁,在线程获取偏向锁时,会用 Thread ID 和 epoch 值覆盖 identity hash code 所在的位置。如果一个对象的 hashCode() 方法已经被调用过一次之后,这个对象不能设置偏向锁,升级为轻量级锁。原创 2023-05-04 17:52:37 · 508 阅读 · 0 评论 -
JUC多并发编程 对象内存布局
在 Hotspot 虚拟机里,对象在堆内存中存在布局可划分为三个部分: 对象头(Header), 实例数据(Instance Data) 和对齐填充(Padding 保证8字节位数)对象头对象标记 MarkWord, 在64位操作系统中, Mark Word 占8个字节, 类型占 8个字节,一共 16个字节GC 年龄采用 4 位 bit 存储, 最大为 15, MaxTenuringThreshold = 15存储内容标志位状态对象哈希码、对象分代年龄01未锁定指向锁记录的指针00。原创 2023-05-04 10:55:15 · 471 阅读 · 0 评论 -
JUC多并发编程 ThreadLocal
ThreadLocal 并不解决线程间共享数据的我呢提ThreadLocal 适用于变量在线程间隔且方法间共享的场景ThreadLocal 通过隐式的在不同线程内创建独立实例副本避免了实例线程安全的问题每个线程有一个只属于自己的专属 Map 并维护了 ThreadLocal 对象与具体实例的映射,该Map 由于只被持有它的线程访问, 故不存在线程安全以及锁的问题。原创 2023-04-27 22:37:20 · 440 阅读 · 0 评论 -
JUC多并发编程 原子类
LongAdder 在无竞争的情况,跟 AtomicLong 一样,对同一个 Base 进行操作,当出现竞争关系时是采用化整为零分散热点的做法,用空间换时间, 用一个数组 cells, 将一个 value 拆分进这个数组 cells。多个线程需要同时对 value 进行操作时候,可以对线程 ID 进行 hash 得到 hash 值,再根据 hash 值映射到这个数组 cells 的某个下标,再对该下标所对应的值进行自增操作。原创 2023-04-27 14:53:50 · 378 阅读 · 0 评论 -
JUC多并发编程 CAS
CAS 是实现自旋锁的基础,CAS 利用 CPU 指令保证了操作的原子性,以达到锁的效果。自旋是指尝试获取锁的线程不会立即阻塞,而是采用循环的方法去尝试获取锁,当线程发现锁呗占用时,会不断循环判断锁的状态,直到获取。这样的好处是减少线程上下文切换的消耗, 缺点是循环会消耗 CPU。compare and swap 的缩写,比较并转换,实现并发算法时常用到的一种技术。它包含三个操作数-内存位置、预期原值级更新值。不代表过程没有问题,可引入版本号,戳记流水。原创 2023-04-24 17:31:51 · 436 阅读 · 0 评论 -
JUC多并发编程 volatile
【代码】JUC多并发编程 volatile。原创 2023-04-24 14:59:32 · 512 阅读 · 0 评论 -
JUC多并发编程 内存模型
JMM 本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程) 各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变化成对另一个线程可见,关键技术点都是围绕多线程的原子性、可见性和有序性展开的。原创 2023-04-23 13:55:38 · 358 阅读 · 0 评论 -
JUC多并发编程 LockSupport和线程中断
interrupt() 仅仅是设置线程的中断状态为true, 发起一个协商而不会立刻停止线程。将当前线程的中断状态清零并重新设为 false,清除线程的中断状态。返回当前线程的中断状态,测试当前线程是否已被中断。原创 2023-04-20 22:30:12 · 318 阅读 · 0 评论 -
JUC多并发编程 锁
一个对象里面如果有多个 synchronized 方法,某一个时刻内,只要一个线程去调用其中的一个 synchronized 方法了,其他的线程都只能等待,换句话说,某一个时刻,只能有唯一的一个线程去访问这些synchronized 方法,锁的是当前对象 this, 被锁定后,其它的线程都不能进入到当前目前对象的其他的 synchronized 方法。原创 2023-04-19 17:13:14 · 362 阅读 · 0 评论 -
JUC多并发编程 CompletableFuture
定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等Future + 线程池异步多线程任务配合,能显著提高程序的执行效率。原创 2023-04-18 17:22:50 · 362 阅读 · 0 评论 -
JUC多并发编程 初探
java 线程是通过 start 的方法启动执行的,主要内容在 native 方法 start0中, openjdk的写 JNI 一般是一一对应的, Thread.java 对应的就是 Thread.c, start0 起始就是 JVM_StartThread。此时查看源代码可以看到在 jvm.h 中找到了声明,jvm.cpp 中有实现。原创 2023-04-17 21:44:28 · 387 阅读 · 0 评论