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的资源,得不到执行。

相关推荐
周末也要写八哥几秒前
C++变参模板之空参包的特殊情况
java·开发语言·c++
书语时4 分钟前
看了 Comparator 源码,我重写了所有业务排序逻辑
java
likerhood11 分钟前
Java final 关键字:从“不能改”到“安全发布”的深入理解
java·windows·安全
花千树-01031 分钟前
SubAgent 基础:拥有自主工具的子代理
java·langchain·llm·agent·langgraph·subagent·harness
水上冰石32 分钟前
java直接调用本地大模型文件,实现对话机器人
java·aigc·jlama
笨蛋不要掉眼泪40 分钟前
Java并发编程:深入理解ThreadLocal
java·开发语言·jvm·并发
番茄去哪了40 分钟前
JVM虚拟机(中)
java·开发语言·jvm
SimonKing41 分钟前
从惊艳到踩坑:AI结对编程的真实复盘
java·后端·程序员