Java语言模拟死锁问题

来源:互联网 发布:阿里云 功能 编辑:程序博客网 时间:2024/06/07 05:07


死锁问题是多线程特有的问题。下面利用Java语言模拟死锁。

class A {public synchronized void foo(B b) {try {Thread.sleep(200); //确保死锁一定发送} catch (InterruptedException e) {e.printStackTrace();}b.last();}public synchronized void last() {}}class B {public synchronized void bar(A a) {try {Thread.sleep(200); //确保死锁一定发送} catch (InterruptedException e) {e.printStackTrace();}a.last();}public synchronized void last() {}}public class TestDeadLock implements Runnable {A a = new A();B b = new B();@Overridepublic void run() {b.bar(a);}public void init() {a.foo(b);}public static void main(String[] args) {TestDeadLock tdl = new TestDeadLock();new Thread(tdl).start();tdl.init();}}

上述代码中,有两个线程:主线程、TestDeadLock线程。首先TestDeadLock线程调用b.bar(a),此时对B进行加锁,同时主线程调用a.foo(b)方法,该方法对A进行加锁。在sleep(200)后,A企图对B进行加锁,B企图对A进行加锁,这样就产生了死锁。


全文完。转载请注明出处。





0 0
原创粉丝点击