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

相关推荐
wzl2026121312 分钟前
企业微信定时群发技术实现与实操指南(原生接口+工具落地)
java·运维·前端·企业微信
凌波粒16 分钟前
Java 8 “新”特性详解:Lambda、函数式接口、Stream、Optional 与方法引用
java·开发语言·idea
曹牧25 分钟前
Eclipse:悬停提示(Hover)
java·ide·eclipse
oyzz12040 分钟前
Spring EL 表达式的简单介绍和使用
java·后端·spring
iNgs IMAC1 小时前
Redis之Redis事务
java·数据库·redis
程序员小假1 小时前
向量检索的流程是怎样的?Embedding 和 Rerank 各自的作用?
java·后端
yaaakaaang2 小时前
二十二、模板方法模式
java·模板方法模式
Wmenghu2 小时前
Ubuntu手动安装jdk;Ubuntu手动安装Maven;Ubuntu手动安装RocketMQ;Ubuntu手动安装RocketMQ-Dashbo
java·linux·ubuntu
后置的猿猴2 小时前
Spring 循环依赖
java·后端·spring
SeSs IZED2 小时前
SSM与Springboot是什么关系? -----区别与联系
java·spring boot·后端