最简单的死锁示例
public class DeadLockDemo {
public void method1() {
synchronized (String.class) {
System.out.println("method1 lock1……");
synchronized (Integer.class) {
System.out.println("method1 lock2……");
}
}
}
public void method2() {
synchronized (Integer.class) {
System.out.println("method2 lock1……");
synchronized (String.class) {
System.out.println("method2 lock2……");
}
}
}
}
如何避免死锁
造成死锁的原因并不是由于多个线程引起的,而是它们请求锁的顺序。如果提供有序的请求锁顺序,则问题得到解决。只要将上述代码进行简单修改,就不会产生死锁。
public class DeadLockDemo {
public void method1() {
synchronized (String.class) {
System.out.println("method1 lock1……");
synchronized (Integer.class) {
System.out.println("method1 lock2……");
}
}
}
public void method2() {
synchronized (String.class) {
System.out.println("method2 lock1……");
synchronized (Integer.class) {
System.out.println("method2 lock2……");
}
}
}
}