Java多线程并发问题:死锁案例解析
死锁是多线程编程中的一种严重问题,当两个或更多的线程在执行过程中因争夺资源而造成的一种互相等待的现象称为死锁。
下面是一个简单的死锁案例:
// 定义两个共享资源
public class Resource {
private int count;
public Resource(int initialCount) {
this.count = initialCount;
}
// 让线程增加资源
public synchronized void increaseCount() {
count++;
}
// 让线程减少资源
public synchronized void decreaseCount() {
if (count > 0) {
count--;
} else {
throw new IllegalArgumentException("Can't decrease count to zero.");
}
}
}
// 两个线程,尝试同时增加资源
public class DeadlockCase {
private Resource res1;
private Resource res2;
public DeadlockCase() {
// 初始化资源
res1 = new Resource(10);
res2 = new Resource(10);
// 创建线程并启动
Thread thread1 = new Thread(() -> increaseResource(res1, 5))));
Thread thread2 = new Thread(() -> increaseResource(res2, 5))));
thread1.start();
thread2.start();
}
private void increaseResource(Resource res, int increment) {
try {
res.increaseCount();
System.out.println("Thread " + Thread.currentThread().getName() + ": Resource increased by " + increment);
} catch (IllegalArgumentException e) {
System.out.println("Thread " + Thread.currentThread().getName() + ": Error occurred - " + e.getMessage());
}
}
}
在这个案例中,线程1和线程2同时尝试增加资源,但每个线程都需要另一个线程已经增加的资源才能继续操作。这就形成了一个相互等待的死锁状态。
还没有评论,来说两句吧...