死锁的产生:
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都处在阻塞状态。
点击 “检测死锁” 按钮,即可定位死锁发生的地方,如下图: