26.活锁、饥饿锁

两个线程,相互改变了对方结束条件,导致两个线程不能结束。执行时间也都是一样,导致两个线程永远不会结束。

java 复制代码
@Slf4j
public class LiveLockDemo {
    static volatile int count = 10;
    public static void main(String[] args) {

        new Thread(() -> {
            while (count > 0) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                count --;
                log.info("count={}", count);
            }
        }, "t1").start();

        new Thread(() -> {
            while (count < 20) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                count ++;
                log.info("count={}", count);
            }
        }, "t2").start();
    }
}

解决办法:将执行时间设置成不一样即可。

扩充:饥饿锁表示某一个线程长时间获取不到cpu的资源,得不到执行。

相关推荐
xjz184214 小时前
JVM虚拟线程:JEP 444开启Java并发编程新纪元
java
JH307314 小时前
Spring Retry 实战:优雅搞定重试需求
java·后端·spring
蓝眸少年CY14 小时前
测试Java性能
java·开发语言·python
何包蛋H14 小时前
数据结构深度解析:Java Map 家族完全指南
java·开发语言·数据结构
linsa_pursuer15 小时前
最长连续序列
java·数据结构·算法·leetcode
强子感冒了15 小时前
Java集合框架深度学习:从Iterable到ArrayList的完整继承体系
java·笔记·学习
drebander15 小时前
Cursor IDE 中 Java 项目无法跳转到方法定义问题解决方案
java·ide·cursor
来不及辣哎呀15 小时前
学习Java第六十二天——Hot 100-09-438. 找到字符串中所有字母异位词
java·开发语言·学习
linsa_pursuer15 小时前
移动零算法
java·算法
lihao lihao15 小时前
模板进阶
java·数据结构·算法