摘要:
原因 常见的场景 一个线程一把锁 正常情况下,一个线程只能有一把锁,当这个线程想上第二把锁的时候,要释放第一把锁,才能上第二把锁; 而如果想要同时拥有两把锁,那么就是互相矛盾的。 而 Java 中 synchronized 已经对这个问题进行了优化。 在 synchronized 中,有一个变量专门 阅读全文
posted @ 2021-08-15 23:55
豆本豆红枣豆奶
阅读(32)
评论(0)
推荐(0)
摘要:
可重入锁与不可重入锁 简单点理解 可重入锁:如果同一个线程加两把锁,不会出现问题的叫 可重入锁;不可重入锁:而会出现问题的叫 不可重入锁。 正常情况下,线程 A 加了锁 1,然后又要加锁 2,但是线程 A 要加锁 2 就必须释放锁 1,但是释放锁 1 就达不到沃目的(目的是加锁 1 和 锁 2),因 阅读全文
posted @ 2021-08-15 20:13
豆本豆红枣豆奶
阅读(35)
评论(0)
推荐(0)
摘要:
公平锁与非公平锁 首先理解 公平 与 非公平 ,公平就是 不插队,非公平就是 插队。 操作系统调度线程的方式就是 随机的,也就是说是 非公平锁。 Java 中 synchronized 是 非公平锁。(自旋锁 也是 非公平锁) 如果想实现非公平锁,那么就需要做出额外的处理: 记录每个线程竞争锁的时间 阅读全文
posted @ 2021-08-15 19:22
豆本豆红枣豆奶
阅读(8)
评论(0)
推荐(0)
摘要:
重量级锁和轻量级锁 重量级锁和轻量级锁 一般(一般一般一般) 类似于悲观锁和乐观锁,站在了不同的角度划分的。 轻量级锁又叫自旋锁。 重量级锁与轻量级锁是站在 工作量 的角度来划分的; 而乐观锁和悲观锁则是站在 锁冲突概率 来划分的。 重量级锁:我们知道,我们要进入一个同步、线程安全的方法时,是需要先 阅读全文
posted @ 2021-08-15 19:04
豆本豆红枣豆奶
阅读(38)
评论(0)
推荐(0)
摘要:
读写锁 读写锁是一种特殊的锁,该锁把读操作和写操作分开了。 普通的锁提供了两个操作:加锁和解锁; 读写锁提供了三个操作:读加锁、写加锁和 解锁; 在有的场景中,只有少部分线程进行写操作,而大多数线程进行读操作。 读操作和写操作之间不需要保证原子性;读操作和读操作之间不需要保证原子性、内存可见性和禁止 阅读全文
posted @ 2021-08-15 18:16
豆本豆红枣豆奶
阅读(19)
评论(0)
推荐(0)
摘要:
乐观锁和悲观锁 乐观锁和悲观锁都是一种锁策略,也就是如何设计锁。 乐观锁:认为这个锁出现竞争的概率比较小(当前场景中,线程数目比较少,只是偶尔竞争一下锁) 悲观锁:和乐观锁相反,悲观锁出现竞争的概率比较大(当前场景中,线程数目比较多,很可能涉及竞争锁) 根据乐观锁和悲观锁的比较,可以得知乐观锁需要做 阅读全文
posted @ 2021-08-15 17:57
豆本豆红枣豆奶
阅读(6)
评论(0)
推荐(0)
摘要:
线程不安全的原因 首先要了解使用多线程的原因,以 杀毒软件 为例。 使用单线程 想要执行 病毒查杀 和 清理垃圾,那么只能先执行 病毒查杀 和 清理垃圾 的其中一个,再执行另外一个。使用多线程 可以 同时执行 清理垃圾 和 病毒查杀。 但是问题随之而来,下边将解析多线程的安全问题。 抢占式执行(线程 阅读全文
posted @ 2021-08-15 02:16
豆本豆红枣豆奶
阅读(65)
评论(0)
推荐(0)
摘要:
今天在学习多线程的时候,了解了 创建线程的几种方式,然后就脑子发热,突然想到 Thread 和 Runnable 创建线程有什么区别吗?毕竟是长得都不一样。所以我就找了一些资料(CSDN 大佬们的文章)来看看,有了一些理解。 明确一点:Runnable 和 Thread 本质上是没有区别的。 区别 阅读全文
posted @ 2021-08-15 00:21
豆本豆红枣豆奶
阅读(43)
评论(0)
推荐(0)
浙公网安备 33010602011771号