活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待。
活锁有可能自行解开,死锁则不能。
package com.what21.thread07;
public class LiveLockThreadTest {
/**
* @param args
*/
public static void main(String[] args) {
Person zhangsan = new Person("张三");
Person lisi = new Person("李四");
// 张三的朋友是李四
zhangsan.friend = lisi;
// 李四的朋友是张三
lisi.friend = zhangsan;
// 张三先鞠躬
zhangsan.bow();
lisi.start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
zhangsan.start();
}
}
package com.what21.thread07;
public class Person extends Thread {
// 朋友
public Person friend;
// 名字
private String name;
// 鞠躬
private boolean bow;
/**
* @param name
*/
public Person(String name) {
this.name = name;
}
/**
* 鞠躬
*/
public void bow() {
this.bow = true;
}
/**
* 完成鞠躬
*/
public void up() {
this.bow = false;
}
@Override
public void run() {
while (true) {
// 如果朋友在鞠躬
if (friend.bow) {
// 自己也得鞠躬
this.bow();
try {
System.out.println(this.name + " 正在鞠躬 ... ");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 一分钟后鞠躬完成
this.up();
} else {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (friend.bow) {
this.bow();
try {
System.out.println(this.name + " 正在鞠躬 ... ");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.up();
} else {
break;
}
}
}
}
}