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

相关推荐
疾风sxp21 小时前
nl2sql技术实现自动sql生成之Spring AI Alibaba Nl2sql
java·人工智能
BullSmall21 小时前
Tomcat11证书配置全指南
java·运维·tomcat
永不停歇的蜗牛21 小时前
K8S之创建cm指令create和 apply的区别
java·容器·kubernetes
爱学习的小可爱卢21 小时前
JavaEE进阶——SpringBoot统一功能处理全解析
java·spring boot·后端·java-ee
汤姆yu21 小时前
基于springboot的二手物品交易系统的设计与实现
java·spring boot·后端
中国胖子风清扬21 小时前
Spring AI Alibaba + Ollama 实战:基于本地 Qwen3 的 Spring Boot 大模型应用
java·人工智能·spring boot·后端·spring·spring cloud·ai
foundbug9991 天前
Modbus协议C语言实现(易于移植版本)
java·c语言·前端
听风吟丶1 天前
Java 反射机制深度解析:从原理到实战应用与性能优化
java·开发语言·性能优化
一缕猫毛1 天前
Flink demo代码
java·大数据·flink