【并发编程】活锁

发布时间:2024年01月24日

? ? ? ?📝个人主页:五敷有你? ? ??
?🔥系列专栏:并发编程
??稳重求进,晒太阳

活锁

定义:活锁出现在两个线程互相改变对象的结束条件,最后谁也无法结束

代码示例

public class TestLiveLock {
    static volatile int count = 10;
    static final Object lock = new Object();
    public static void main(String[] args) {
        new Thread(() -> {
            // 期望减到 0 退出循环
            while (count > 0) {
                sleep(0.2);
                count--;
                log.debug("count: {}", count);
            }
        }, "t1").start();
        new Thread(() -> {
            // 期望超过 20 退出循环
            while (count < 20) {
                sleep(0.2);
                count++;
                log.debug("count: {}", count);
            }
        }, "t2").start();
    }
}

解锁方式:

  • 错开执行,
  • 睡眠时间随机等

饥饿

很多教程把饥饿定义为:一个线程由于优先级太低,始终得不到CPU调度执行,也不能够结束,饥饿的情况不易演示,讲读写锁时会设计饥饿问题。

文章来源:https://blog.csdn.net/m0_62645012/article/details/135817964
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。