死锁的产生:
1、两个线程,各自拥有一个加锁的资源,同时都想获取对方手中的资源。
代码示例:
public class DeadLock {
public static void main(String[] args) {
Object a = new Object();
Object b = new Object();
new Thread(new MyThread(a,b),"A").start();
new Thread(new MyThread(b,a),"B").start();
}
}
class MyThread implements Runnable{
private Object objectA;
private Object objectB;
public MyThread(Object objectA, Object objectB) {
this.objectA = objectA;
this.objectB = objectB;
}
@Override
public void run() {
synchronized (objectA){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (objectB){
System.out.println(Thread.currentThread().getName()+" run 。");
}
}
}
}
死锁的定位:jconsole

由上图可以发现,我们创建的线程A,B都处在阻塞状态。
点击 “检测死锁” 按钮,即可定位死锁发生的地方,如下图:
