两个线程,相互改变了对方结束条件,导致两个线程不能结束。执行时间也都是一样,导致两个线程永远不会结束。
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的资源,得不到执行。