摘要: 概念 “自旋”可以理解为“自我旋转”,这里的“旋转”指“循环”,比如 while 循环或者 for 循环。“自旋”就是自己在这里不停地循环,直到目标达成。而不像普通的锁那样,如果获取不到锁就进入阻塞。 对比自旋和非自旋的获取锁的流程 自旋锁不会放弃 CPU 时间片,而是通过自旋等待锁的释放,也就是说 阅读全文
posted @ 2022-03-27 22:21 学无终 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 读写锁与ReentrantLock对比 普通的 ReentrantLock可以我们保证了线程安全,但是也浪费了一定的资源,因为如果多个读操作同时进行,其实并没有线程安全问题,我们可以允许让多个读操作并行,以便提高程序效率。 但是写操作不是线程安全的,如果多个线程同时写,或者在写的同时进行读操作,便会 阅读全文
posted @ 2022-03-27 22:18 学无终 阅读(964) 评论(0) 推荐(0) 编辑
摘要: 公平锁与非公平锁 首先,我们来看下什么是公平锁和非公平锁,公平锁指的是按照线程请求的顺序,来分配锁;而非公平锁指的是不完全按照请求的顺序,在一定情况下,可以允许插队。但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而是仅仅“在合适的时机”插队。 合适的时机 假设当前线程在请求获取锁 阅读全文
posted @ 2022-03-27 22:15 学无终 阅读(268) 评论(0) 推荐(0) 编辑
摘要: synchronized与Lock相同点 都可以用于保证线程和资源安全 都可以保证可见性,锁的可见性,不同于volatile 对于 synchronized 而言,线程 A 在进入 synchronized 块之前或在 synchronized 块内进行操作,对于后续的获得同一个 monitor 锁 阅读全文
posted @ 2022-03-27 22:13 学无终 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 获取和释放 monitor 锁的时机 最简单的同步方式就是利用 synchronized 关键字来修饰代码块或者修饰一个方法,那么这部分被保护的代码,在同一时刻就最多只有一个线程可以运行,而 synchronized 的背后正是利用 monitor 锁实现的。所以首先我们来看下获取和释放 monit 阅读全文
posted @ 2022-03-27 22:06 学无终 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 锁的7大分类 偏向锁/轻量级锁/重量级锁 公平锁/非公平锁 可中断锁/不可中断锁 悲观锁/乐观锁 可重入锁/不可重入锁 共享锁/独占锁 自旋锁/非自旋锁 偏向锁/轻量级锁/重量级锁 这三种锁特指 synchronized 锁的状态,通过在对象头中的 mark word 来表明锁的状态。 偏向锁 如果 阅读全文
posted @ 2022-03-27 22:02 学无终 阅读(464) 评论(0) 推荐(0) 编辑