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 分钟前
[天机学堂]-01环境搭建
java·spring cloud
h***593310 分钟前
JAVA进阶 Thread学习06 synchronized关键字
java·开发语言·学习
j***485410 分钟前
【JSqlParser】Java使用JSqlParser解析SQL语句总结
java·开发语言·sql
如意.75911 分钟前
【C++】——异常
java·开发语言
liberty88814 分钟前
dppt如何找到弹框
java·服务器·前端
s***385617 分钟前
Spring 中的 @ExceptionHandler 注解详解与应用
java·后端·spring
T***742521 分钟前
【Spring Boot】 SpringBoot自动装配-Condition
java·spring boot·后端
Seven9722 分钟前
剑指offer-44、翻转单词序列
java
醉风塘25 分钟前
如何将class文件替换到Jar包中:完整指南
java·jar
276695829227 分钟前
雷池waf 逆向
java·开发语言·前端·python·wasm·waf·雷池waf