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

相关推荐
天真吴邪xie1 分钟前
Claude Code安装
java·git
小新同学^O^8 分钟前
简单学习 --> Spring统一处理
java·学习·spring·统一功能处理
程序猿乐锅8 分钟前
【Tilas|第七篇】学员管理实现
java·笔记·idea·tlias
程序猿乐锅14 分钟前
【Tilas|第六篇】班级管理实现
java·笔记·tlias
吴声子夜歌14 分钟前
Java——继承实现的基本原理
java·继承
Kiling_070416 分钟前
Java集合进阶:Collection与List详解
java·windows·list
小新同学^O^16 分钟前
简单学习 --> 数据加密
java·数据库·学习·数据加密
XiYang-DING18 分钟前
【Java】URL(Uniform Resource Locator)
java·开发语言
0xDevNull19 分钟前
Java十道高频面试题
java·开发语言
aXin_ya22 分钟前
微服务第十一天 MQ相关问题
java·微服务·架构