构造几个死锁的例子(Java )
Posted vaxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造几个死锁的例子(Java )相关的知识,希望对你有一定的参考价值。
目录
构造几个死锁的例子(Java )
1
public class Deadlock
public static void main(String[] args)
final A a1 = new A("a1");
final A a2 = new A("a2");
a1.setA(a2);
a2.setA(a1);
Thread t1 = new Thread(()->
a1.method1();
);
Thread t2 = new Thread(()->
a2.method1();
);
t1.start();
t2.start();
class A
String name;
A a;
public A(String name)
this.name = name;
public void setA(A a)
this.a = a;
synchronized void method1()
System.out.println(Thread.currentThread().getName() + ": 锁住了" + name);
try
Thread.sleep(500);
catch (InterruptedException e)
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + ": 我在等待" + a.name);
a.method2();
synchronized void method2()
System.out.println(Thread.currentThread().getName() + ": 我得到了" + name);
System.out.println(Thread.currentThread().getName() + ": " + name + "." + a.name + ".method2()");
运行结果:
2
public class Deadlock
public static void main(String[] args)
Thread t1 = new Thread(()->
A.method1();
);
Thread t2 = new Thread(()->
B.method1();
);
t1.start();
t2.start();
class A
synchronized static void method1()
System.out.println(Thread.currentThread().getName() + ": 锁住了" + A.class);
try
Thread.sleep(500);
catch (InterruptedException e)
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + ": 我在等待" + B.class);
B.method2();
synchronized static void method2()
System.out.println(Thread.currentThread().getName() + ": 获得了" + A.class);
System.out.println(Thread.currentThread().getName() + ": " + A.class + ".method2");
class B
synchronized static void method1()
System.out.println(Thread.currentThread().getName() + ": 锁住了" + B.class);
try
Thread.sleep(500);
catch (InterruptedException e)
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + ": 我在等待" + A.class);
A.method2();
synchronized static void method2()
System.out.println(Thread.currentThread().getName() + ": 获得了" + B.class);
System.out.println(Thread.currentThread().getName() + ": " + B.class + ".method2");
运行结果:
3
public class Deadlock
public static void main(String[] args)
final String lock1 = "lock1";
final String lock2 = "lock2";
Thread t1 = new Thread(()->
synchronized (lock1)
System.out.println(Thread.currentThread().getName() + ": 锁住了" + lock1);
try
Thread.sleep(500);
catch (InterruptedException e)
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + ": 在等待" + lock2);
synchronized (lock2)
System.out.println(Thread.currentThread().getName() + ": 获得了" + lock2);
);
Thread t2 = new Thread(()->
synchronized (lock2)
System.out.println(Thread.currentThread().getName() + ": 锁住了" + lock2);
try
Thread.sleep(500);
catch (InterruptedException e)
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + ": 在等待" + lock1);
synchronized (lock1)
System.out.println(Thread.currentThread().getName() + ": 获得了" + lock1);
);
t1.start();
t2.start();
运行结果:
以上是关于构造几个死锁的例子(Java )的主要内容,如果未能解决你的问题,请参考以下文章