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

相关推荐
漫霂6 小时前
二叉树的翻转
java·数据结构·算法
语戚6 小时前
力扣 51. N 皇后:基础回溯、布尔数组优化、位运算全解(Java 实现)
java·算法·leetcode·力扣·剪枝·回溯·位运算
程序猿阿越6 小时前
Kafka4源码(三)Share Group共享组
java·后端·源码阅读
亦暖筑序6 小时前
让AI不再"一本正经胡说八道":Spring AI RAG与VectorStore源码全解
java·源码阅读
蒙奇·D·路飞-6 小时前
大模型时代下 Java 后端开发的技术重构与工程实践
java·开发语言·重构
ZK_H7 小时前
半导体工艺流程
java·c语言·开发语言·计算机网络·金融
Crazy________7 小时前
4.10dockerfile构建镜像
java·开发语言
阿维的博客日记7 小时前
锁消除和锁粗化
java·逃逸分析
云烟成雨TD7 小时前
Spring AI 1.x 系列【26】结构化输出执行流程
java·人工智能·spring
雪的季节7 小时前
qt信号槽跨线程使用时候的坑
java·开发语言·qt