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

相关推荐
我登哥MVP1 分钟前
走进 Gang of Four 设计模式:装饰器模式
java·spring boot·设计模式·装饰器模式
云恒要逆袭9 分钟前
Java类型转换详解:小数字转大自动跑,大数字转小要小心
java·后端
星辰_mya29 分钟前
openfeign之在回首
java·架构·dubbo·springcloud·openfeign
青山木30 分钟前
Hot 100 --- 滑动窗口最大值
java·数据结构·算法·leetcode·动态规划
青山木31 分钟前
Hot 100 --- 除自身以外数组的乘积
java·数据结构·算法
Sam092741 分钟前
Java 转 AI Agent 开发:Java 和 Python 的区别与快速学习指南
java·人工智能·python·ai
heimeiyingwang1 小时前
【架构实战】数据脱敏与隐私保护:合规是底线
java·开发语言·架构
dengyuezhe80601 小时前
《C++ 异常机制与智能指针:从原理到实现》
android·java·c++
于指尖飞舞1 小时前
java后端面试题(常用集合极简)
java·开发语言·面试
我星期八休息1 小时前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring