通过使用两个锁,让两个线程去交叉的获得锁
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class DeadLock {
public Lock l1 = new ReentrantLock();
public Lock l2 = new ReentrantLock();
class A implements Runnable{
public void run() {
while (true){
l1.lock();
System.out.println("A got l1.lock");
try {
Thread.sleep(2000);
l2.lock();
System.out.println("Class A l1.lock && l2.lock");
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
l2.lock();
l1.unlock();
}
}
}
}
class B implements Runnable{
public void run() {
l2.lock();
System.out.println("B got l2.lock");
try {
Thread.sleep(2000);
l1.lock();
System.out.println("Class B l2.lock && l1.lock");
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
l1.unlock();
l2.unlock();
}
}
}
public static void main(String[] args) {
DeadLock deadLock = new DeadLock();
Thread thread1 = new Thread(deadLock.new A());
Thread thread2 = new Thread(deadLock.new B());
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("The progrom complete");
}
}