活锁代码
@Slf4j
public class LiveLock {
static volatile int count = 10;
static final Object object = new Object();
public static void main(String[] args) {
new Thread(() -> {
while (count > 0) {
try {
sleep((long) 0.2);
} catch (InterruptedException e) {
e.printStackTrace();
}
count--;
log.info("{}", count);
}
}, "t1").start();
new Thread(() -> {
while (count < 20) {
try {
sleep((long) 0.2);
} catch (InterruptedException e) {
e.printStackTrace();
}
count--;
log.info("{}", count);
}
}, "t2").start();
}
}
活锁是两个线程互相改变共享值,导致代码会无期限运行下去
区别
死锁是两个线程互相持有对方的锁,相互等待导致代码不能运行下去(互相阻塞)
解决方法
- 设置一个随机睡眠时间,让它们交错