并发编程-线程活跃性
活跃性
: 线程代码无法执行完成. 分为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 调度执行,也不能够结束