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

相关推荐
heimeiyingwang4 分钟前
官网知识库结构化整理指南
java·sql·架构·database
山东布谷网络科技7 分钟前
对标Yalla和Chamet:海外直播语聊APP中多人派对房的关键技术细节
java·开发语言·人工智能·php·语音识别·软件需求·海外电商系统开发
、BeYourself15 分钟前
Spring AI 文档切片策略优化指南
java·人工智能·spring
xuxie9916 分钟前
【无标题】
java·开发语言
堕27417 分钟前
java数据结构当中的《Lambda表达式》
java·数据结构·python
摇滚侠20 分钟前
基于 session 的登录认证方式,基于 token 的登录认证方式,对比
java·开发语言·intellij-idea
北国13720 分钟前
【Java】多线程输出滞后/错误解决&&线程创建方式与原理
java·开发语言
假客套20 分钟前
2026 JAVA 腾讯云人脸比对工具类,支持url或者base64进行比对
java·spring boot·腾讯云人脸比对
wfsm21 分钟前
reactive streaming
java
Coder_Boy_24 分钟前
【Java核心】JVM核心知识清单
java·开发语言·jvm