死锁(Deadlock)
多线程同步时,如果同步代码嵌套,使用相同锁,会出现死锁
package javastudy01;
public class Deadlock extends Thread {
private static String s1 = "1";
private static String s2 = "2";
public static void main(String[] args) {
new Deadlock(){
public void run(){
while(true){
synchronized (s1) {
System.out.println(s1);//先获取s1,到此处时希望获取s2,且自身s1未释放
synchronized (s2) {
System.out.println(s2);
}
} //s1到此处才释放
}
}
} .start();
new Deadlock(){
public void run(){
while(true){
synchronized (s2) {
System.out.println(s1);//先获取s2,到此处时希望获取s1,且自身s2未释放
synchronized (s1) {
System.out.println(s2);
}
} //s2到此处才释放,与上面的线程形成了死锁
}
}
} .start();
}
}
运行结果
没有一直执行下去,产生死锁