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

相关推荐
波诺波2 分钟前
最小 SOFA XML 场景结构 0-base.scn
xml·java·前端
李少兄2 分钟前
深入理解 Web 服务器、Servlet 容器与现代 Java Web 架构
java·服务器·servlet
weixin_399380697 分钟前
Tongweb7049m10适配skywalking(by lqw)
java·skywalking
写了20年代码的老程序员9 分钟前
企业微信、飞书、钉钉 Webhook 接入,后端代码为什么总是越写越丑
java·微信
解决问题no解决代码问题12 分钟前
设计模式分类介绍
java·开发语言·设计模式
码不停蹄的玄黓18 分钟前
SpringBoot 自动装配原理
java·spring boot·后端
白露与泡影21 分钟前
Java虚拟线程实战:从线程池痛点到性能优化全流程
java·开发语言·性能优化
码上有光22 分钟前
c++模板进阶知识讲解(对模板的进一步的运用与理解)
java·前端·c++·特化·模板进阶·偏特化
IT空门:门主25 分钟前
Java 单例模式详解:7 种实现方式 + volatile 原理 + 反射与序列化问题
java·开发语言·单例模式
SimonKing30 分钟前
别再把业务逻辑写进回调接口了!支付回调的正确打开方式
java·后端·程序员