本文主要是介绍26.活锁、饥饿锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
两个线程,相互改变了对方结束条件,导致两个线程不能结束。执行时间也都是一样,导致两个线程永远不会结束。
@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的资源,得不到执行。
这篇关于26.活锁、饥饿锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!