Java多线程同步问题:死锁示例
死锁在多线程编程中是一种严重的状态,即两个或更多的线程互相等待对方释放资源,从而导致都无法继续执行。
以下是一个简单的Java多线程死锁示例:
// 假设我们有4个资源R1, R2, R3, 和R4
class Resource {
int id;
Lock lock; // 锁对象
Resource(int id) {
this.id = id;
lock = new Lock(id);
}
void acquire() { lock.lock(); }
void release() { lock.unlock(); }
}
class Lock {
int id;
Lock(int id) { this.id = id; }
void lock() { /* 假设锁操作是原子的 */ System.out.println("Lock " + id + " acquired"); }
void unlock() { System.out.println("Lock " + id + " released")); }
}
// 线程1获取资源R1
Thread thread1 = new Thread(() -> {
Resource r1 = new Resource(1);
r1.acquire();
// 现在r1是线程1的资源,它不能被其他线程获取
});
thread1.start();
// 线程2尝试获取资源R2
Thread thread2 = new Thread(() -> {
Resource r2 = new Resource(2);
r2.acquire(); // 这里会抛出死锁异常
});
thread2.start();
在这个例子中,线程1先获取了资源R1,然后它进入了等待状态,等待线程2释放资源R2。同样,线程2在尝试获取资源R2时被R1占用而无法继续。
这就是典型的Java多线程死锁示例。
还没有评论,来说两句吧...