package com.linkcm.test;
public class SLock {
static Object resource1=new Object();//资源1
static Object resource2=new Object();//资源2
public static void main(String args[]) {
new Thread() {
@Override
public void run() {
synchronized (resource1) {
System.out.println("当前线程"+this.currentThread()+"得到了资源1抢到了锁");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程"+this.currentThread()+"抢占资源2来获取锁");
synchronized (resource2) {//由于资源2已经被线程1持有且未释放,导致死锁
System.out.println("当前线程得到了资源2"+this.currentThread()+"抢到了锁");
}
}
}
}.start();
new Thread() {
@Override
public void run() {
synchronized (resource2) {
System.out.println("当前线程"+this.currentThread()+"得到了资源2抢到了锁");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程"+this.currentThread()+"抢占资源1来获取锁");
synchronized (resource1) {//由于资源1已经被线程0持有且未释放,导致死锁
System.out.println("当前线程得到了资源2"+this.currentThread()+"抢到了锁");
}
}
}
}.start();
}
}