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

相关推荐
AKA__Zas12 分钟前
跨网段主机的文件传输过程
java·网络·网络协议·学习方法
Wang's Blog15 分钟前
Java 接入Redis: Redis简介与NoSQL定位
java·服务器·redis
程序猿乐锅19 分钟前
【黑马点评 | 第四篇】Redis缓存雪崩
java·数据库·spring boot·redis·缓存
小尹哥-程序员20 分钟前
第4集:让AI学会看文档:Spring AI RAG入门实战
java·人工智能·spring
可乐配鸡翅31 分钟前
day seven 猜数字小游戏
java
张小凡vip33 分钟前
Java Web 设置 Session 超时时间:如何让 Session 永不失效
java·spring boot
浪里摸鱼34 分钟前
Java 泛型快速学习指南(面向接口扫描场景)
java
我是大猴子44 分钟前
redis执行get等命令时底层操作
java
叶总没有会1 小时前
微服务--分布式基础
java·spring·spring cloud·微服务
鹿角片ljp1 小时前
Prompt Cache、Token 成本与 Plan Compiler 的工程设计
java·python·算法