Java多线程阻塞与唤醒问题实例
在Java多线程中,阻塞与唤醒是两种常见的同步机制。下面通过一个简单的生产者消费者(Producer-Consumer)模型来展示。
生产者(ProducerThread):
class ProducerThread extends Thread {
private int count = 0;
public ProducerThread(String name) {
super(name);
}
public void produce() {
try {
while (count <= 10) { // 每生产10个产品就暂停
System.out.println("Producer produced: " + count++);
// 延迟时间,模拟真实情况中的等待
Thread.sleep(500);
// 让消费者线程有机会处理
synchronized (consumerLock) {
consumerLock.notify();
}
} // 暂停循环
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
消费者(ConsumerThread):
class ConsumerThread extends Thread {
private int count = 0;
public ConsumerThread(String name) {
super(name);
}
public void consume() {
try {
while (count <= 10) { // 当产品数量少于10时消费
System.out.println("Consumer consumed: " + count++);
// 让生产者线程有机会处理
synchronized (producerLock) {
producerLock.notify();
}
} // 消费循环
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
以上代码中,生产者(ProducerThread)会持续生产产品(每1秒生产一个),而消费者(ConsumerThread)则会消费这些产品。当产品数量少于10时,生产者和消费者都会暂停各自的操作,直到满足条件后继续执行。
通过这个例子,你可以看到阻塞与唤醒在Java多线程中的实际应用。
还没有评论,来说两句吧...