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

相关推荐
独自破碎E6 分钟前
BISHI61 小q的数列
java·开发语言
Dylan的码园23 分钟前
从软件工程师看计算机是如何工作的
java·jvm·windows·java-ee
callJJ30 分钟前
Spring AI Tool Calling(工具调用)详解——让大模型拥有“动手能力“
java·人工智能·spring·spring ai·tool calling
南部余额35 分钟前
SpringBoot文件上传全攻略
java·spring boot·后端·文件上传·multipartfile
java1234_小锋1 小时前
Java高频面试题:什么是Redis哨兵机制?
java·redis·面试
苦学编程的谢1 小时前
好运buff机 ------ 测试报告
java·开发语言·功能测试
汤姆yu2 小时前
基于springboot的智能民宿预定与游玩系统
java·spring boot·后端
黎雁·泠崖2 小时前
Java常用类核心精讲 · 七篇精华总结
java·开发语言
逆境不可逃2 小时前
【从零入门23种设计模式01】创建型之工厂模式(简单工厂+工厂方法+抽象工厂)
java·spring·设计模式·简单工厂模式·工厂方法模式·抽象工厂模式·工厂模式
重生之后端学习2 小时前
208. 实现 Trie (前缀树)
java·开发语言·数据结构·算法·职场和发展·深度优先