Java多线程并发编程:死锁示例
死锁是多线程编程中的一种严重问题,当两个或更多的线程在执行过程中因争夺资源而造成的一种相互等待的现象称为死锁。
以下是一个简单的Java多线程死锁示例:
// 创建两个共享资源的类
class Resource {
int count = 10;
// 提供获取和减少计数的方法
public synchronized int getCount() {
return count;
}
public synchronized void decreaseCount() {
count--;
}
}
// 定义两个线程,每个线程都会尝试增加资源的计数
class WorkerThread extends Thread {
private Resource resource;
// 创建新线程时传入共享资源
public WorkerThread(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
while (true) {
try {
// 线程试图获取资源的当前计数
int count = resource.getCount();
if (count == 0) { // 资源可用
resource.decreaseCount(); // 减少计数以表示已使用
System.out.println("Thread " + this.getName() + " acquired resource of count: " + count);
break; // 线程不再循环,退出run方法
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Resource resource = new Resource();
WorkerThread worker1 = new WorkerThread(resource);
WorkerThread worker2 = new WorkerThread(resource);
// 启动两个线程
worker1.start();
worker2.start();
}
}
在这个例子中,两个线程(worker1和worker2)同时尝试获取一个资源的计数。由于资源有限(初始计数为10),如果一个线程正在使用资源(计数不为0),另一个线程就无法再获取这个资源。
当这种情况持续时,就会发生死锁。在这个示例中,如果线程worker2首先开始,然后worker1开始,系统将陷入死锁状态。
还没有评论,来说两句吧...