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

相关推荐
Li_7695328 分钟前
Spring Cloud — SkyWalking(六)
java·后端·spring·spring cloud·skywalking
2201_7578308716 分钟前
SpringBoot
java·spring boot·后端
FAFU_kyp25 分钟前
Java基础与核心知识面试题逐字稿模板
java
程序员西西30 分钟前
深入剖析 Java 中的 ZGC 机制:原理、优势与实践
java·后端·算法
月明长歌31 分钟前
【码道初阶】Leetcode.189 轮转数组:不熟悉ArrayList时踩得坑,被Arraylist初始化骗了?
java·算法·leetcode·职场和发展
BBB努力学习程序设计32 分钟前
Java设计模式实战指南:创建型模式深度解析
java
BBB努力学习程序设计34 分钟前
Java内存管理与JVM调优完全指南
java
编程火箭车41 分钟前
【Java SE 基础学习打卡】22 分支结构 - if
java·流程控制·编程基础·if语句·分支结构·条件判断·新手避坑
Ivy_belief42 分钟前
C++新特性汇总:涵盖C++11到C++23
java·c++·c++11·c++23
哈哈哈笑什么1 小时前
Spring Boot接口国际化异常信息方案
java·spring boot·后端