生产者与消费者问题Java实现
产品类:
public class Product {
private int id;
private String value;
public Product(int id,String value){
this.id=id;
this.value=value;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
公用缓冲池
import java.util.LinkedList;
public class ProductTable {
// 缓冲池
private LinkedList<Product> products = new LinkedList<Product>();
// 生产
public synchronized void produce(Product product) {
while(products.size() >= 10) { // 容量限制為 10
try {
wait();
}
catch(InterruptedException e) {}
}
products.addLast(product);
System.out.println(product.getId()+" added");
notifyAll();
}
// 消费
public synchronized Product consume() {
while(products.size() <= 0) {
try {
wait();
}
catch(InterruptedException e) {}
}
Product product = (Product) products.removeFirst();
System.out.println(product.getId()+" removed");
notifyAll();
return product;
}
}
生产者:
public class Producer implements Runnable {
private ProductTable productTable;
public Producer(ProductTable productTable) {
this.productTable = productTable;
}
public void run() {
for (int i=0; i<5; i++) {
Product p = new Product(i, "product " + "-" + i);
productTable.produce(p);
try {
Thread.sleep((int) (Math.random() * 3000)); // 等待一个随机的时间
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
消费者:
public class Consumer implements Runnable {
private ProductTable productTable;
public Consumer(ProductTable productTable) {
this.productTable = productTable;
}
public void run() {
for (int i = 1; i <= 5; i++) {
try {
Thread.sleep((int) (Math.random() * 3000)); // 等待一个随机的时间
}
catch (InterruptedException e) {
e.printStackTrace();
}
productTable.consume();
}
}
}
测试类:
public class Test {
public static void main(String[] args) {
ProductTable queue = new ProductTable();
// 生产者线程体
Producer producer = new Producer(queue);
// 消费者线程体
Consumer consumer = new Consumer(queue);
for (int i=0; i<2; i++) {
Thread prod = new Thread(producer);
prod.start();
}
for (int i=0; i<2;i++) {
Thread consu = new Thread(consumer);
consu.start();
}
}
}
分享到:
相关推荐
生产者与消费者的问题一直都是初级编程这需要了解的内容。
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
利用Java多线程实现的操作系统的生产者与消费者算法,主要用到了线程的同步,等待与唤醒操作。
生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
基本满足操作系统课上要求,java实现的生产者消费者模型。
生产者与消费者问题,用java实现线程
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
java多线程实现生产者和消费者
用java模拟生产者和消费者在缓冲区间的阻塞情况。
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制. 说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数. 设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后...
java实现生产者消费者,生产者先生产,然后通知消费者消费,然后再通知生产者生产
java 实现操作系统的消费者生产者问题
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
详细的生产者消费者的java实现过程,详细的生产者消费者的java实现过程,详细的生产者消费者的java实现过程
java线程实现的生产者和消费者的程序java线程实现的生产者和消费者的程序
用java多线程简易实现生产者消费者模式的代码,用java多线程简易实现生产者消费者模式的代码。
用java编写的生产者消费者问题,是经典的多线程问题
os课程设计、通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制
用Java实现消费者与生产者两个线程进行调度