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

相关推荐
tuokuac1 分钟前
Spring Boot约定大于配置(配置MQ消息转换器的具体实例)
java·后端·spring
wuqingshun3141592 分钟前
说一下Spring中的ApplicationContext和BeanFactory的区别?
java·后端·spring
wyazyf2 分钟前
TREA IDE运行java springboot项目
java·spring boot·trea ide 启动java
星月昭铭5 分钟前
一次全表审核“卡99%”故障排查:空字符串在while循环中引发的性能陷阱
java
jessecyj6 分钟前
Windows操作系统部署Tomcat详细讲解
java
摇滚侠6 分钟前
Redis 怎么用,Java 开发,Redis 怎么用
java·数据库·redis
木井巳7 分钟前
【递归算法】全排列 Ⅱ
java·算法·leetcode·决策树·深度优先·剪枝
weixin_433179338 分钟前
Python - 调试
java·开发语言·python
代码探秘者9 分钟前
【算法篇】6.分治
java·数据结构·后端·python·算法·排序算法
biubiubiu070612 分钟前
Spring Boot 中如何自定义一个 Starter
java·spring boot·后端