Java多线程并发问题:死锁示例
在Java中,死锁通常发生在两个或更多线程互相等待对方释放资源时的情况。以下是一个简单的死锁示例:
public class DeadlockExample {
// 线程1需要的资源
private Object resource1 = new Object();
// 线程2需要的资源
private Object resource2 = new Object();
public void startThreads() {
Thread thread1 = new Thread(() -> acquireResource(resource1)));
Thread thread2 = new Thread(() -> acquireResource(resource2)));
thread1.start();
thread2.start();
}
// 线程尝试获取资源
private synchronized void acquireResource(Object resource) {
if (resource.equals(resource1)) {
System.out.println("Thread 1 acquired resource 1.");
unlockResource(resource1);
} else if (resource.equals(resource2))) {
System.out.println("Thread 2 acquired resource 2.");
unlockResource(resource2);
} else {
throw new IllegalArgumentException("Invalid resource to acquire.");
}
}
// 线程释放资源
private synchronized void unlockResource(Object resource) {
System.out.println("Thread released resource " + resource + ".");
}
public static void main(String[] args) {
DeadlockExample deadlockExample = new DeadlockExample();
deadlockExample.startThreads();
}
}
在这个例子中,线程1需要资源1才能继续执行,而线程2需要资源2。当两个线程都试图获取对方的资源时,就会发生死锁。
还没有评论,来说两句吧...