08 2021 档案
摘要:当我们遇到死锁之后,除了可以手动重启程序解决之外,还可以考虑是使用顺序锁和轮询锁,这部分的内容可以参考我的上一篇文章,这里就不再赘述了。然而,轮询锁在使用的过程中,如果使用不当会带来新的严重问题,所以本篇我们就来了解一下这些问题,以及相应的解决方案。 问题演示 当我们没有使用轮询锁之前,可能会出现这
阅读全文
摘要:死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。 死锁示例代码如下: public class DeadLockExample { public static void main(String[]
阅读全文
摘要:死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。 死锁示例 接下来,我们先来演示一下 Java 中最简单的死锁,我们创建两个锁和两个线程,让线程 1 先拥有锁 A,然后在 1s 后尝试获取锁 B,同
阅读全文
摘要:在 Java 中 synchronized 和 ReentrantLock 默认使用的都是非公平锁,而它们采用非公平锁的原因都是一致的,都是为了提升程序的性能。那为什么非公平锁就能提升性能呢?接下来我们一起来看。 非公平锁 非公平锁:每个线程获取锁的顺序是随机的,并不会遵循先来先得的规则,任何线程在
阅读全文
摘要:JDK 1.5 之前 synchronized 的性能是比较低的,但在 JDK 1.5 中,官方推出一个重量级功能 Lock,一举改变了 Java 中锁的格局。JDK 1.5 之前当我们谈到锁时,只能使用内置锁 synchronized,但如今我们锁的实现又多了一种显式锁 Lock。 前面的文章我们
阅读全文
摘要:synchronized 在 JDK 1.5 时性能是比较低的,然而在后续的版本中经过各种优化迭代,它的性能也得到了前所未有的提升,上一篇中我们谈到了锁膨胀对 synchronized 性能的提升,然而它也只是“众多” synchronized 性能优化方案中的一种,那么我们本文就来盘点一下 syn
阅读全文
摘要:synchronized 在 JDK 1.5 之前性能是比较低的,在那时我们通常会选择使用 Lock 来替代 synchronized。然而这个情况在 JDK 1.6 时就发生了改变,JDK 1.6 中对 synchronized 进行了各种优化,性能也得到了大幅的提升,这也是目前版本中还能经常见到
阅读全文
摘要:synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当它修饰不同对象时,其意义也是不同的,下面我们一起来看。 synchronized 用法 synchroniz
阅读全文