线程死锁
A在等B,B在等A。
歹徒:你放了我,我放了人质。
警察:你放了人质,我放了你。
代码演示如下
package xc;
public class Demo10 {
public static void main(String[] args) {
Culprit c = new Culprit();
Police p = new Police();
new Thread(new Myrunnable(c,p)).start();
p.say(c);
}
//线程
static class Myrunnable implements Runnable{
private Culprit c;
private Police p;
public Myrunnable(Culprit c, Police p) {
this.c = c;
this.p = p;
}
@Override
public void run() {
c.say(p);
}
}
//歹徒
static class Culprit{
public synchronized void say(Police p){
System.out.println("歹徒:你放了我,我放了人质");
p.respond();
}
public synchronized void respond(){
System.out.println("歹徒放了人质,逃走了");
}
}
//警察
static class Police{
public synchronized void say(Culprit c){
System.out.println("警察:你放了人质,我放了你");
c.respond();
}
public synchronized void respond(){
System.out.println("抓住了歹徒,且保护了人质");
}
}
}
类相当于大门,里面有两间“方法”,只要有一个“方法”里有人,们就会锁住,双方就会僵持不下。