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 分钟前
MyBatis-Plus 使用技巧
java·mybatis·mybatis-plus
XORE9512 分钟前
IDEA Generate POJOs.groovy 踩坑小计 | 生成实体 |groovy报错
java·spring·intellij-idea
heart000_122 分钟前
基于SpringBoot的智能问诊系统设计与隐私保护策略
java·spring boot·后端
半聋半瞎29 分钟前
【进程和线程】(面试高频考点)
java·jvm·面试
功德+n41 分钟前
在 Maven 中使用 <scope> 元素:全面指南
java·maven
失业写写八股文1 小时前
Java类加载阶段深度解析:三步走全流程详解
java
yyueshen1 小时前
单例模式,有必要用volatile么?
java·单例模式·设计模式
一条闲鱼_mytube1 小时前
[Kubernetes] 7控制平面组件
java·平面·kubernetes
Y雨何时停T2 小时前
Spring IoC 详解
java·spring·rpc
&白帝&2 小时前
Java @PathVariable获取路径参数
java·开发语言·python