
java并发
文章平均质量分 73
java并发
yangwei0407
这个作者很懒,什么都没留下…
展开
-
什么是MESI缓存一致性协议?怎么解决并发的可见性问题?
什么是MESI协议的四种状态?: 该缓存行有效, 数据被修改了,但未同步回内存。即数据只存在于本缓存行中,和内存中的数据不一样。: 该缓存行有效,数据未被修改,和内存中的数据一致,并且数据只存在本缓存行中。:该缓存行有效,数据未被修改,和内存中的数据一致,并且数据同时存在于其他缓存中。:该缓存行数据无效,数据已过时。原创 2024-11-20 15:10:41 · 326 阅读 · 0 评论 -
Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化
否则说明多个线程竞争锁,轻量级锁就要膨胀为重量级锁,锁标志的状态值变为“10”,Mark Word中存储的就是指向重量级锁(互斥量)的指针,后面等待锁的线程也要进入阻塞状态。(1)在代码进入同步块的时候,如果同步对象锁状态为无锁状态(锁标志位为“01”状态,是否为偏向锁为“0”),虚拟机首先将在当前线程的栈帧中建立一个名为锁记录(Lock Record)的空间,用于存储锁对象目前的Mark Word的拷贝,官方称之为 Displaced Mark Word。(4)如果CAS获取偏向锁失败,则表示有竞争。原创 2024-11-22 10:24:24 · 1534 阅读 · 0 评论 -
线程同步的几种方法?
synchronized 底层实际上通过JVM来实现的,同一时间只能有一个线程去执行synchronized 中的代码块,那么这个操作就是不能被其它线程打断的,所以这里天然就具有原子性了。也就是通过monitorenter指令之后,synchronized内部的共享变量,每次读取数据的时候被强制从主内存读取最新的数据。这样通过这种方式,数据修改之后立即刷新回主内存,其他线程进入synchronized代码块后,使用共享变量的时候强制读取主内存的数据,上一个线程对共享变量的变更操作,它就能立即看到了。原创 2024-11-20 11:28:46 · 423 阅读 · 0 评论