Java并发编程:线程死锁问题实例
线程死锁是多线程环境中的一种严重问题,当两个或更多线程因争夺资源而造成的一种互相等待的现象时,就可能发生死锁。
下面是一个简单的Java代码实例,展示了如何创建并引发死锁:
// 创建两个互有依赖的类
class Resource {
boolean lock;
public Resource() {
lock = false;
}
public synchronized void acquireLock() {
if (!lock) {
lock = true;
notifyAll(); // 当线程获得资源后,唤醒等待的其他线程
}
}
public synchronized void releaseLock() {
if (lock) {
lock = false;
notifyAll(); // 通知所有等待锁释放的线程
}
}
}
class ThreadA extends Thread {
private Resource resource;
public ThreadA(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
while (true) { // 模拟无限循环,直到死锁发生
resource.acquireLock(); // 线程A获取资源
System.out.println("Thread A acquired lock and is using the resource.");
// 线程B在此等待资源释放
resource.releaseLock();
System.out.println("Thread A released lock and returned the resource.");
}
}
}
public class Main {
public static void main(String[] args) {
Resource resource = new Resource(); // 创建资源对象
ThreadA threadA = new ThreadA(resource); // 创建线程A并初始化资源
threadA.start(); // 启动线程A执行任务
// 这里创建线程B,它会尝试获取已被线程A占用的资源
ThreadB threadB = new ThreadB(resource); // 创建线程B并初始化资源
threadB.start(); // 启动线程B执行任务
// 这里我们期望系统最终进入死锁状态,因为两个线程都在等待对方释放资源
}
}
这个例子展示了在多个线程相互竞争同一资源的情况下,如果每个线程都按照某种策略去获取和释放资源,就可能引发死锁。
还没有评论,来说两句吧...