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

相关推荐
G***66919 分钟前
Java区块链开发
java·开发语言·区块链
Java天梯之路10 分钟前
上篇讲坑,这篇讲 “根”!Java 数据类型底层逻辑全解析
java·面试
悟空码字11 分钟前
手把手搭建Java微服务:从技术选型到生产部署
java·后端·微服务
leonardee12 分钟前
MySQL----case的用法
java·后端
8***B23 分钟前
Java自然语言处理
java·开发语言·自然语言处理
小王不爱笑13229 分钟前
文件上传(3)
java·spring
赛贝维权申诉32 分钟前
30款亚马逊热销儿童玩具,美国外观专利侵权预警!
java·开发语言
幻灭行度1 小时前
docker镜像导入到K8S的containerd中
java·docker·kubernetes
武昌库里写JAVA1 小时前
Java如何快速入门?Java基础_Java入门
java·vue.js·spring boot·后端·sql
那我掉的头发算什么1 小时前
【javaEE】多线程进阶--CAS与原子类
android·java·jvm·java-ee·intellij-idea