什么是线程活锁呢?
下文笔者讲述线程活锁的简介说明,如下所示:
线程活锁的概念
线程活锁的概念: 一个线程无法运行,但没有阻塞 一直循环做一件事情 活锁的概念:线程是活的,锁也是活的例:
活锁的重要逻辑代码: while(isHungry){ //当前拥有者不是自己 等待 if(spoon.owner != this){ try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } continue; } //自己如果不是饥饿的 那就让出 if(diner.isHungry){ System.out.println(this.name + ":" + "哈哈哈," + diner.name + "你先吃吧"); spoon.setOwner(diner); continue; } //自己先吃 spoon.use(); isHungry = false; System.out.println(this.name + ":我吃完了"); spoon.setOwner(diner); }
解决活锁的方法分享
导致原因 重试机制不变,消息队列始终重试,吃饭始终谦让 以太网的指数退避算法 加入随机因素 //自己如果不是饥饿的 那就让出 if(diner.isHungry){ //加入随机性 来解决活锁 ,目前是百分之10的概率
Random random = new Random(); if(diner.isHungry && random.nextInt(10) < 9){ System.out.println(this.name + ":" + "哈哈哈," + diner.name + "你先吃吧"); spoon.setOwner(diner); continue; }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。