赞
踩
两个线程,相互改变了对方结束条件,导致两个线程不能结束。执行时间也都是一样,导致两个线程永远不会结束。
- @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的资源,得不到执行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。