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

相关推荐
小鱼小鱼.oO6 分钟前
java后端学习经验分享(大三进大厂版)
java·经验分享·学习
Hooomeey7 分钟前
深度解析线程与线程池:从 OS 调度内核到 Java 并发架构的演进逻辑
java·后端·架构
狂奔小菜鸡7 分钟前
Day8 | Java 方法全解析
java·后端·java ee
Mos_x17 分钟前
服务器公网IP、私网IP、弹性IP是什么?区别与应
java·后端
落日漫游19 分钟前
ArgoCD与Helm:云原生部署对比解析
java·容器·kubernetes
Yeniden23 分钟前
【设计模式】享元模式(Flyweight)大白话讲解!
java·设计模式·享元模式
乙己40723 分钟前
设计模式——单例模式(singleton)
java·c++·单例模式·设计模式
豐儀麟阁贵44 分钟前
5.6对象
java·开发语言
格格步入1 小时前
🤔一次 OOM 排查(dump文件分析)
java·后端
蓝-萧1 小时前
Spring Security安全框架原理与实战
java·后端