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

相关推荐
鱼香鱼香rose29 分钟前
java-2
java·开发语言·python
是小蟹呀^8 小时前
Spring Security + JWT 面试题整理
java·jwt·springsecurity
spencer_tseng11 小时前
Redis + Nacos.bat
java·windows·dos
troyzhxu11 小时前
列表查询的 GraphQL —— 一行代码终结你的 if-else 地狱!
java·springboot·graphql
孫治AllenSun12 小时前
【DataX】生产环境搭建DataX集群案例
java·开发语言·jvm
好好沉淀13 小时前
@NotBlank(message = “{xxx}“) 注解中花括号的含义
java
fīɡЙtīиɡ ℡13 小时前
内存泄漏产生的原因
java·spring·servlet
hkj880813 小时前
Ubuntu 切换java版本
java·linux·ubuntu
码智社14 小时前
Java实现RSA密钥生成、加密解密、加签验签
java