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

相关推荐
那我掉的头发算什么3 分钟前
【javaEE】多线程——线程安全进阶☆☆☆
java·jvm·安全·java-ee·intellij-idea
悟空CRM服务11 分钟前
我用一条命令部署了完整CRM系统!
java·人工智能·开源·开源软件
组合缺一12 分钟前
Solon AI 开发学习 - 1导引
java·人工智能·学习·ai·openai·solon
百***490014 分钟前
基于SpringBoot和PostGIS的各省与地级市空间距离分析
java·spring boot·spring
电摇小人37 分钟前
科学备赛今年NOIP!!
java·开发语言
未若君雅裁1 小时前
LeetCode 18 - 四数之和 详解笔记
java·数据结构·笔记·算法·leetcode
Bug快跑-11 小时前
Java、C# 和 C++ 并发编程的深度比较与应用场景
java·开发语言·前端
Moe4881 小时前
ConcurrentHashMap 重要方法实现原理和源码解析(二)
java·后端
有梦想的攻城狮2 小时前
初识Rust语言
java·开发语言·rust
小虾米 ~2 小时前
RocketMQ DefaultMQPushConsumer vs DefaultLitePullConsumer
java·rocketmq·java-rocketmq