典型的死锁问题
package com.test;
//典型的死锁
public class Test {
public static void main(String[] args) {
Thread one = new A();
Thread two = new B();
one.start();
two.start();
}
}
class Mylock{
public static Object a = new Object();
public static Object b = new Object();
}
class A extends Thread{
@Override
public void run() {
synchronized (Mylock.a) {
System.out.println("A拿到了a");
synchronized (Mylock.b) {
System.out.println("A拿到了b");
System.out.println("A拿到了a和b");
}
}
}
}
class B extends Thread{
@Override
public void run() {
synchronized (Mylock.b) {
System.out.println("B拿到了b");
synchronized (Mylock.a) {
System.out.println("B拿到了a");
System.out.println("B拿到了a和b");
}
}
}
}
输出
A拿到了a
B拿到了b
本文通过两个线程分别获取不同的锁资源,展示了典型的Java死锁现象。线程A首先获取锁a,然后尝试获取锁b;同时,线程B先获取锁b,再试图获取锁a,最终导致两个线程都无法继续执行。
1043

被折叠的 条评论
为什么被折叠?



