死锁前
public class DeadLock {
public static void main(String[] args) {
MakeUp m1 = new MakeUp(0,"灰姑娘");
MakeUp m2 = new MakeUp(1,"白雪公主");
m1.start();
m2.start();
}
}
// 口红
class Lipstick{
}
// 镜子
class Mirror{
}
// 化妆
class MakeUp extends Thread{
// 需要的资源只有一份,用static来保证只有一份
static Lipstick lipstick = new Lipstick();
static Mirror mirror = new Mirror();
int choice; // 选择
String name; // 使用化妆品的人
public MakeUp(int choice, String name) {
this.choice = choice;
this.name = name;
}
@Override
public void run() {
try {
makeUp();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void makeUp() throws InterruptedException {
if (choice==0){
synchronized (lipstick){// 获得口红
System.out.println(this.name+"获得口红的锁"); //一秒后想获得镜子
Thread.sleep(1000);
synchronized (mirror){// 获得镜子
System.out.println(this.name+"获得镜子的锁");
}
}
}else {
synchronized (mirror){ // 获得镜子的锁
System.out.println(this.name+"获得镜子的锁"); // 两秒后想获得口红
Thread.sleep(2000);
synchronized (lipstick){
System.out.println(this.name+"获得口红的锁");
}
}
}
}
}
解决死锁后
public class DeadLock {
public static void main(String[] args) {
MakeUp m1 = new MakeUp(0,"灰姑娘");
MakeUp m2 = new MakeUp(1,"白雪公主");
m1.start();
m2.start();
}
}
// 口红
class Lipstick{
}
// 镜子
class Mirror{
}
// 化妆
class MakeUp extends Thread{
// 需要的资源只有一份,用static来保证只有一份
static Lipstick lipstick = new Lipstick();
static Mirror mirror = new Mirror();
int choice; // 选择
String name; // 使用化妆品的人
public MakeUp(int choice, String name) {
this.choice = choice;
this.name = name;
}
@Override
public void run() {
try {
makeUp();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void makeUp() throws InterruptedException {
if (choice==0){
synchronized (lipstick){// 获得口红
System.out.println(this.name+"获得口红的锁"); //一秒后想获得镜子
Thread.sleep(1000);
}
synchronized (mirror){// 获得镜子
System.out.println(this.name+"获得镜子的锁");
}
}else {
synchronized (mirror){ // 获得镜子的锁
System.out.println(this.name+"获得镜子的锁"); // 两秒后想获得口红
Thread.sleep(2000);
}
synchronized (lipstick){
System.out.println(this.name+"获得口红的锁");
}
}
}
}