今日,在复习多线程知识,本篇内容是为了学习后,为了防止遗忘。只针对死锁的产生原因,如何死锁进行简单的解释和演示。
死锁产生原因(简单的列子说明):
1,线程1,占有对象1时,同时还想占有对象2.
2,线程2,占有对象2时,想占有对象1.
3,俩个对象都等待着对象释放 ,就这样一直等待着。
从而导致了死锁的产生。
产生死锁的过程演示:
public static void main(String[] args) {
Hero h1 = new Hero(new StringBuffer("貂蝉"), 600.0f, 120);
Hero h2 = new Hero(new StringBuffer("伽罗"), 550.0f, 150);
Thread t1 = new Thread(){ //匿名方法
public void run(){
synchronized (h1){
System.out.println("t1 已经占有貂蝉");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("等待占有伽罗中.....");
synchronized(h2){
System.out.println("t1,又已经占有伽罗");
}
}
}
};
t1.start();
Thread t2 = new Thread(){
public void run() {
synchronized (h2) {
System.out.println("t2 已经占有伽罗");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("等待占有貂蝉中.....");
synchronized (h1) {
System.out.println("t2,又已经占有貂蝉");
}
}
}
};
t2.start();
}
}
结果:
t2 已经占有伽罗
t1 已经占有貂蝉
等待占有伽罗中…
等待占有貂蝉中…
运行后的结果表示双方线程一直在等待着 对方先释放对象,就这样一直等待…