Java多线程编程:死锁问题实例
死锁是多线程编程中的一个重要问题。当两个或更多的线程在执行过程中,因争夺资源而造成的一种相互等待的现象时,就可能出现死锁。
下面是一个简单的Java多线程死锁实例:
// 定义资源
class Resource {
private int count;
Resource(int count) {
this.count = count;
}
synchronized void acquire() {
if (count == 0) {
throw new InterruptedException("资源已耗尽");
}
count--;
}
synchronized void release() {
count++;
}
}
// 定义线程
class ThreadA extends Thread {
private Resource resource;
ThreadA(Resource resource) {
this.resource = resource;
}
public void run() {
try {
// 资源1
resource.acquire();
System.out.println("Thread A acquired resource 1");
// 资源2
resource.acquire();
System.out.println("Thread A acquired resource 2");
// 释放资源
resource.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
Resource resource1 = new Resource(1);
Resource resource2 = new Resource(1);
ThreadA threadA1 = new ThreadA(resource1);
ThreadA threadA2 = new ThreadA(resource2);
threadA1.start();
threadA2.start();
}
}
在这个例子中,资源1和资源2分别被线程A1和线程A2请求。如果两个线程同时获取资源,就可能导致死锁现象。在正确的执行顺序下,是不会发生死锁的。
还没有评论,来说两句吧...