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

相关推荐
plainGeekDev2 小时前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮2 小时前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js
plainGeekDev2 小时前
getter/setter → Kotlin 属性
android·java·kotlin
一线大码2 小时前
Smart-Doc 的简单使用
java·后端·restful
MacroZheng3 小时前
Claude Code官方桌面端正式发布,夯爆了!
java·人工智能·后端
虚无境4 小时前
如何编写一个SpringBoot项目告警推送的Starter
java·prometheus·webhook
NE_STOP19 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园19 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆19 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程