Java随笔记 - Java代码实现一个死锁程序
死锁demo
-
线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能释放的资源,从而导致所有的任务都无法继续完成。这里就不再赘述理论细节,主要是要用代码简单实现一个死锁的程序,具体代码如下:
// new两个对象用来作为锁 // 两个方法,方法A先获得obj1的锁,睡眠一秒后,尝试去获取obj2的锁 // 方法B先获得obj2的锁,睡眠一秒后,尝试去获取obj1的锁 // 两个方法错开,分别拥有一个锁,再去获取对方手里的锁,就会进入死锁状态 public class DeadLock { private Object obj1 = new Object(); private Object obj2 = new Object(); public void methodA() { synchronized (obj1) { System.out.println(Thread.currentThread().getName() + " - get the lock of obj1."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " - to get the lock of obj2..."); synchronized (obj2) { System.out.println(Thread.currentThread().getName() + " - get the lock of obj2."); } } } public void methodB() { synchronized (obj2) { System.out.println(Thread.currentThread().getName() + " - get the lock of obj2."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " - to get the lock of obj1..."); synchronized (obj1) { System.out.println(Thread.currentThread().getName() + " - get the lock of obj1."); } } } }
public class ServiceA implements Runnable { private DeadLock deadLock; public ServiceA(DeadLock deadLock) { this.deadLock = deadLock; } @Override public void run() { deadLock.methodA(); } } public class ServiceB implements Runnable { private DeadLock deadLock; public ServiceB(DeadLock deadLock) { this.deadLock = deadLock; } @Override public void run() { deadLock.methodB(); } } public static void main(String[] args) { DeadLock deadLock = new DeadLock(); Thread threadA = new Thread(new ServiceA(deadLock)); Thread threadB = new Thread(new ServiceB(deadLock)); threadA.start(); threadB.start(); }
更多推荐
Java随笔记 - Java代码实现一个死锁程序
发布评论