synchronized实现
java
package com.example.demo.dealock.synchronize;
/**
* @author chenwei
* @date 2025-12-17 17:02
* @description
*/
public class DeadLockDemo {
public final static Object lockA = new Object();
public final static Object lockB = new Object();
public static void main(String[] args){
new Thread("死锁线程1"){
@Override
public void run() {
synchronized (lockA){
System.out.println("Thread 1: Holding lock A...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1: Waiting for lock B...");
synchronized (lockB){
System.out.println("Thread 1: Acquired lock B!");
}
}
}
}.start();
new Thread("死锁线程2"){
@Override
public void run() {
synchronized (lockB){
System.out.println("Thread 2: Holding lock B...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2: Waiting for lock A...");
synchronized (lockA){
System.out.println("Thread 2: Acquired lock A!");
}
}
}
}.start();
}
}
ReentrantLock实现
java
package com.example.demo.dealock.reentrenlock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author chenwei
* @date 2025-12-17 17:14
* @description
*/
public class DeadLockDemo {
public final static ReentrantLock lockA = new ReentrantLock();
public final static ReentrantLock lockB = new ReentrantLock();
public static void main(String[] args){
new Thread("死锁线程1"){
@Override
public void run() {
lockA.lock();
System.out.println("Thread 1: Holding lock A...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1: Waiting for lock B...");
{
lockB.lock();
System.out.println("Thread 1: Acquired lock B!");
lockB.unlock();
}
lockA.unlock();
}
}.start();
new Thread("死锁线程2"){
@Override
public void run() {
lockB.lock();
System.out.println("Thread 2: Holding lock B...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2: Waiting for lock A...");
{
lockA.lock();
System.out.println("Thread 2: Acquired lock A!");
lockA.unlock();
}
lockB.unlock();
}
}.start();
}
}