/**
* 必定发生死锁的情况
*/
public class MustDeadLock implements Runnable {
private final Object lockA;
private final Object lockB;
public MustDeadLock(Object lockA, Object lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "进入了run方法...");
synchronized (lockA) {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException ignored) {}
System.out.println(Thread.currentThread().getName() + "持有" + lockA + ",尝试获得" + lockB);
synchronized (lockB) {
System.out.println(Thread.currentThread().getName() + "成功拿到两把锁");
}
}
}
public static void main(String[] args) {
Object lockA = new Object();
Object lockB = new Object();
new Thread(new MustDeadLock(lockA, lockB), "AAA").start();
new Thread(new MustDeadLock(lockB, lockA), "BBB").start();
}
}
/**
* 必定发生死锁的情况
*/
public class MustDeadLock implements Runnable {
static final Object LOCK_A = new Object();
static final Object LOCK_B = new Object();
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "进入了run方法...");
if ("A".equals(Thread.currentThread().getName())) {
synchronized (LOCK_A) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (LOCK_B) {
System.out.println("线程A成功拿到两把锁");
}
}
}
if ("B".equals(Thread.currentThread().getName())) {
synchronized (LOCK_B) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (LOCK_A) {
System.out.println("线程B成功拿到两把锁");
}
}
}
}
public static void main(String[] args) {
MustDeadLock run = new MustDeadLock();
Thread t1 = new Thread(run, "A");
Thread t2 = new Thread(run, "B");
t1.start();
t2.start();
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-13537.html