Java 实现基于 ArrayList 的生产者 / 消费者
作者:极客罗杰
- 2024-06-18 上海
本文字数:752 字
阅读完需:约 2 分钟
![Java实现基于ArrayList的生产者/消费者](https://static001.geekbang.org/infoq/01/01621cf7608e100269fbd93d824100a6.jpeg)
总所周知,生产者/消费者是计算机操作系统经典问题,感兴趣同学可以去查阅相关资料,以下是笔者用 java 实现的生产者/消费者模型。
//缓冲区大小
private static final int MAX_SIZE = 10;
//定义缓冲区
private static List<Integer> buffer = new ArrayList<Integer>(MAX_SIZE);
private static Random random = new Random();
//生产者线程
public class Producer extends Thread {
public void run() {
while(true) {
synchronized(buffer) {
if(buffer.size() == MAX_SIZE) {
try {
buffer.wait();
} catch(Exception e) {
}
}
buffer.add(random.nextInt());
buffer.notify();
System.out.println(buffer.get(buffer.size() - 1));
}
}
}
}
//消费者线程
public class Consumer extends Thread {
public void run() {
while(true) {
synchronized(buffer) {
if(buffer.isEmpty()) {
try {
buffer.wait();
} catch(Exception e) {
}
}
System.out.println(buffer.get(0));
buffer.remove(0);
buffer.notify();
}
}
}
}
//主程序
public static void main(String[] args) throws Exception {
ProducerConsumerArrayList pcm = new ProducerConsumerArrayList();
Consumer consumer0 = pcm.new Consumer();
Consumer consumer1 = pcm.new Consumer();
Producer producer0 = pcm.new Producer();
Producer producer1 = pcm.new Producer();
consumer0.start();
consumer1.start();
producer0.start();
producer1.start();
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 8
版权声明: 本文为 InfoQ 作者【极客罗杰】的原创文章。
原文链接:【http://xie.infoq.cn/article/0edfe287b5c4bedb80b3a2065】。文章转载请联系作者。
![用户头像](http://static001.geekbang.org/account/avatar/00/27/13/be/439ad3a0.jpg?x-oss-process=image/resize,w_200,h_200)
极客罗杰
关注
还未添加个人签名 2021-04-11 加入
还未添加个人简介
评论