并发编程-线程活跃性

活跃性: 线程代码无法执行完成. 分为3种情况:死锁活锁饥饿

死锁

一个线程需要同时获取多把锁,这时就容易发生死锁

死锁案例和查看方法:https://www.cnblogs.com/mpyidudu/p/15628517.html

活锁

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

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 调度执行,也不能够结束

posted @ 2021-12-26 19:00  狻猊的主人  阅读(32)  评论(0编辑  收藏  举报