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

相关推荐
Charles_go6 分钟前
41、C#什么是单例设计模式
java·设计模式·c#
皮皮林55122 分钟前
别再只会 mvn install 了!深入拆解 Maven 插件核心原理
java·maven
百***490028 分钟前
SpringSecurity的配置
java
@老蝴1 小时前
Java EE - 常见的死锁和解决方法
java·开发语言·java-ee
wangmengxxw1 小时前
Swagger技术
java·swagger
全干engineer1 小时前
idea拉取github代码 -TLS connect error 异常问题
java·github·intellij-idea
10岁的博客2 小时前
二维差分算法高效解靶场问题
java·服务器·算法
百***93502 小时前
Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)
java·tomcat
qq_281317472 小时前
kubernetes(k8s)-pod生命周期
java·容器·kubernetes
IT界的奇葩2 小时前
代码规范 spring-javaformat使用
java·spring·代码规范