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

相关推荐
unclecss1 小时前
把 Spring Boot 的启动时间从 3 秒打到 30 毫秒,内存砍掉 80%,让 Java 在 Serverless 时代横着走
java·jvm·spring boot·serverless·graalvm
tuokuac1 小时前
@PathVariable与@RequestParam
java·spring
q***16081 小时前
Tomcat的server.xml配置详解
xml·java·tomcat
程序员西西1 小时前
SpringBoot整合Apache Spark实现一个简单的数据分析功能
java·后端
n***84071 小时前
Tomcat 乱码问题彻底解决
java·tomcat
LiLiYuan.1 小时前
【Lombok库常用注解】
java·开发语言·python
培风图南以星河揽胜2 小时前
Java实习模拟面试|离散数学|概率论|金融英语|数据库实战|职业规划|期末冲刺|今日本科计科要闻速递:技术分享与学习指南
java·面试·概率论
能鈺CMS2 小时前
能鈺CMS · 虚拟发货源码
java·大数据·数据库
sheji34162 小时前
【开题答辩全过程】以 环保监督管理系统为例,包含答辩的问题和答案
java·eclipse
不会玩电脑的Xin.2 小时前
Web请求乱码解决方案
java·javaweb