1、什么是活锁
活锁是指,线程没有发生阻塞,但依然执行不下去的情况。
2、活锁的例子
如果两个线程互相改变对方的结束条件,就可能导致双方谁也无法结束。
比如这个程序:
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();
}
}
相当于一个抽水一个注水,水池永远不会空或者满