Java死锁例子
public class ThreadSyn2 implements Runnable {
private static Object obj1 =
new Object();
private static Object obj2 =
new Object();
/**
* @param args
*/
public static void main(String[] args) {
ThreadSyn2 ts1 =
new ThreadSyn2();
ThreadSyn2 ts2 =
new ThreadSyn2();
Thread t1 =
new Thread(ts1);
Thread t2 =
new Thread(ts2);
t1.setName(
"theOne");
t2.setName(
"theTwo");
t1.start();
t2.start();
}
public void run() {
String name = Thread.currentThread().getName();
if (name.equals(
"theOne")) {
method1(name);
}
else {
method2(name);
}
}
private void method1(String name) {
System.out.println(name);
synchronized (obj1) {
System.out.println(name+
" 获取了 obj1"+
" 锁");
try {
Thread.sleep(
1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name+
" 正在申请obj2 ");
synchronized (obj2) {
System.out.println(obj2);
}
}
}
private void method2(String name) {
System.out.println(name);
synchronized (obj2) {
System.out.println(name+
" 获取了 obj2"+
" 锁");
try {
Thread.sleep(
1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name+
" 正在申请obj1 ");
synchronized (obj1) {
System.out.println(obj1);
}
}
}
}
theOne 占有obj1锁,申请obj2锁,但是obj2锁被theTwo占有,theTwo又在申请被theOne占有的obj1锁,导致死锁
转载请注明原文地址: https://ju.6miu.com/read-672426.html