什么是线程活锁呢?
下文笔者讲述线程活锁的简介说明,如下所示:
线程活锁的概念
线程活锁的概念:
一个线程无法运行,但没有阻塞
一直循环做一件事情
活锁的概念:线程是活的,锁也是活的
例:
活锁的重要逻辑代码:
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;
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


