package com.itheima;
public class DeadThread {
private static String s = "筷子左";
private static String s1 = "筷子右";
public static void main(String[] args) {
// TODO Auto-generated method stub
new Thread(new Runnable(){
public void run(){
while(true){
synchronized(s){
System.out.println("已经拿到筷子左,等待筷子右");
synchronized(s1){
System.out.println("已经拿到筷子右,开吃");
}
}
}
}
}).start();
new Thread(){
public void run(){
while(true){
synchronized(s1){
System.out.println("已经拿到筷子右,等待筷子左");
synchronized(s){
System.out.println("已经拿到筷子左,开吃");
}
}
}
}
}.start();
}
}
死锁算是金典了,面试的时候手写代码可能会用到,死锁问题直白来说就是两个人去饭店吃饭,只有一双筷子,结果一人各拿到了一只,互相都想要对方的筷子这样就导致无法吃饭,对应到java中就会产生程序卡死的情况,以上的死锁案例是用匿名对象完成的,使用了两种方法,第一个线程的用的是实现Runnable接口完成的,第二个线程使用继承Thread类完成的。匿名方式虽然看起来复杂,但习惯之后会发现写起来其实很方便。 |
|