Java并发编程:线程死锁问题案例
线程死锁是多线程编程中常见的问题。简单来说,当两个或更多的线程在执行过程中互相等待对方释放资源时,就会出现死锁。
以下是一个线程死锁的案例:
// 创建两个共享资源
class Resource {
boolean isUsed = false;
// 为资源添加使用方法
void use() {
if (!isUsed) {
isUsed = true;
System.out.println("Resource " + this + " used by thread " + Thread.currentThread().getName());
} else {
System.out.println("Resource " + this + " already in use by thread " + Thread.currentThread().getName()));
}
}
// 为资源添加释放方法
void release() {
if (isUsed) {
isUsed = false;
System.out.println("Resource " + this + " released by thread " + Thread.currentThread().getName());
} else {
System.out.println("Resource " + this + " already not in use when released by thread " + Thread.currentThread().getName()));
}
}
}
// 创建两个线程,每个线程都尝试获取资源并使用
class WorkerThread implements Runnable {
private Resource resource;
public WorkerThread(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
try {
System.out.println("Thread " + Thread.currentThread().getName() + " waiting to acquire resource " + resource);
// 线程尝试获取资源
if (resource.use()) {
System.out.println("Thread " + Thread.currentThread().getName() + " acquired resource " + resource);
// 使用资源后,释放资源
resource.release();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
// 创建两个共享资源
Resource resource1 = new Resource();
Resource resource2 = new Resource();
// 创建两个线程,每个线程都尝试获取资源并使用
Thread workerThread1 = new Thread(new WorkerThread(resource1))));
Thread workerThread2 = new Thread(new WorkerThread(resource2))));
// 启动线程
workerThread1.start();
workerThread2.start();
}
}
在这个案例中,两个线程workerThread1
和workerThread2
分别尝试获取两个资源resource1
和resource2
。如果一个线程成功使用了资源,那么它会释放资源给其他的线程。这就可能导致死锁,因为每个线程都在等待对方释放资源。
还没有评论,来说两句吧...