- 博客(3)
- 收藏
- 关注
原创 你知道死锁,但是你知道活锁吗?
说来也是有趣,我完全是被代码带笑了。 什么是活锁? 线程没有阻塞,始终在运行,但是程序始终得不到进展,因为线程始终做重复的同样的事情。 假设有这样一堆恩爱夫妻,贫困年代,大家条件不好,有了吃的互相谦让,过于谦让,一张纸谦让,就会导致活锁。就是线程一直在运行,事情却没有任何进展。 和死锁相比,活锁更害人,因为活锁一直在消耗CPU资源,而死锁会阻塞。 定义一个 勺子类: static class Sp...
2020-02-15 22:01:57 219
原创 从Happens-before 原则说volatile和synchronized
什么是Happens-before ? 1.)Happens-before 规则是用来解决可见性问题的:在时间上,动作A发生在动作B之前,B保证能看见A,这就是Happens-before 原则。 2.)如果一个操作Happens-before 第二个操作,那么我们就说第一个操作对于第二个操作是可见的。 什么不是Happens-before ? 两个线程没有相互配合的机制,所以代码X和Y的执行结果...
2020-02-15 14:14:14 232
原创 一段代码演示代码重排序带来的影响
假设在类中,定义这样的4个变量。 private static int x = 0, y = 0; private static int a = 0, b = 0; 两行代码分别由两个线程进行如下的操作。 线程1: a = 1; x = b; 线程2: b = 1; y = a; 在一般的情况下,由于两个线程的快慢顺序前后顺序,均可能出现如下情况。 发生碰撞:a=...
2020-02-15 10:34:00 215
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人