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

相关推荐
abments13 小时前
pgsql timestamp without time zone > character varying解决方案
java
sanggou13 小时前
大数据量查询处理方案 - 内存优化与高效展示
java
没有bug.的程序员13 小时前
Java 字节码:看懂 JVM 的“机器语言“
java·jvm·python·spring·微服务
-大头.13 小时前
深入理解 Java 内存区域与 JVM 运行机制
java·jvm
没有bug.的程序员14 小时前
JVM 整体架构:一套虚拟机的心脏与血管
java·jvm·spring boot·spring cloud·架构
晨枫阳14 小时前
不同语言的元组对比
java·前端·javascript
悟能不能悟14 小时前
怎么在idea合并2个个branch
java·ide·intellij-idea
i020815 小时前
SpringBoot 项目配置
java·spring boot·后端
计算机毕业设计小途15 小时前
计算机毕业设计推荐:基于springboot的快递物流仓库管理系统【Java+spring boot+MySQL、Java项目、Java毕设、Java项目定制定
java·spring boot·mysql
苹果醋315 小时前
VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
java·运维·spring boot·mysql·nginx