Container类
package multithread.producerandconsumer;
public class Container {
static int size=5;
int index=0;
String [] container=new String[size];
synchronized public void add(String production){
if(index>=size){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
container[index]=production;
System.out.println("P-"+Thread.currentThread().getName()+" produce "+container[index]+" production");
index++;
notify();
}
synchronized public void remove(){
if(index==0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
index--;
System.out.println("C-"+Thread.currentThread().getName()+" consume "+container[index]+" production");
container[index]=null;
notify();
}
}
Producer类
package multithread.producerandconsumer;
public class Producer implements Runnable {
Container container=null;
Producer(Container container){
this.container=container;
}
@Override
public void run() {
long proId=0;
while(true){
proId++;
container.add(proId+"NO.");
if(proId==10)
break;
}
}
}
Consumer类
package multithread.producerandconsumer;
public class Consumer implements Runnable {
Container container=null;
Consumer(Container container){
this.container=container;
}
@Override
public void run() {
for(int i=0;i<10;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
container.remove();
}
}
}
测试类
package multithread.producerandconsumer;
public class TestProduceAndConsume {
public static void main(String[] args) {
Container container=new Container();
Producer prod=new Producer(container);
Consumer consumer=new Consumer(container);
new Thread(prod).start();
new Thread(consumer).start();
// new Thread(consumer).start();
// new Thread(consumer).start();
}
}
分享到:
相关推荐
本主题将深入探讨生产者与消费者模型的Java实现。 生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者...
基本满足操作系统课上要求,java实现的生产者消费者模型。
以下是对生产者-消费者问题及其Java实现的详细解析: 1. **生产者-消费者模型**: - **生产者**:负责生产数据并将其放入一个共享的数据缓冲区。 - **消费者**:从共享缓冲区中取出数据并进行处理。 - **缓冲区*...
总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
这就是一个基本的Java“生产者-消费者”模型实现。通过这样的设计,我们可以有效地控制生产者和消费者的执行顺序,确保了数据的正确性,并且避免了先消费后生产的情况。在实际应用中,可能需要根据具体需求进行优化...
生产者和消费者线程都需要有自己的业务逻辑,这可以通过重写`run()`方法实现。 2. **共享资源**:在生产者-消费者模型中,通常会有一个固定大小的缓冲区作为共享资源。可以使用数组或链表实现,但需要注意的是,当...
总之,生产者消费者模式是多线程编程中的一种重要设计模式,它通过信号量和条件变量实现了线程间的同步和通信,有效提高了系统资源的利用率和整体效率。在Java中,我们可以借助并发库轻松实现这一模式,使得代码更加...
在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...
详细的生产者消费者的java实现过程,详细的生产者消费者的java实现过程,详细的生产者消费者的java实现过程
下面我们将详细讲解如何在Java中实现生产者与消费者: 1. **定义缓冲区** 缓冲区是生产者与消费者之间共享的数据结构,通常是一个固定大小的数组。例如: ```java class Buffer { private int[] items = new ...
本实验旨在通过实际编程操作,深入理解Java中生产者与消费者模型的工作机制及其同步控制策略,具体目标为实现多生产者与多消费者之间的数据共享和线程同步。 #### 实验原理 生产者-消费者模型主要涉及到以下概念:...
这个库提供了多种工具类,如Semaphore(信号量)、BlockingQueue(阻塞队列)和Condition(条件变量),这些都可以用来实现生产者-消费者模型。 1. **BlockingQueue**: 阻塞队列是一种特殊的队列,它具有线程安全的...
在Java中,我们可以利用`java.util.concurrent`包中的工具类来实现生产者消费者模式。其中,`BlockingQueue`接口是一个理想的候选,因为它提供了线程安全的数据结构,可以用于线程间的同步。`BlockingQueue`有多种...
"操作系统生产者与消费者Java源代码详解" 操作系统生产者与消费者是一个经典的计算机科学问题,旨在解决多个进程之间的同步问题。在Java语言中,可以使用多种方法实现生产者与消费者模型。本文将通过Java图形用户...
在解压缩后的"proandcom"文件中,可能包含了进一步的代码示例或详细的解释,你可以查看这些文件以加深对生产者消费者问题的理解。同时,为了优化性能和避免死锁,编写多线程程序时,需要遵循良好的设计原则,例如...
下面是一个简单的生产者消费者问题的Java实现: ```java import java.util.concurrent.ArrayBlockingQueue; public class ProducerConsumerProblem { public static void main(String[] args) { ...
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...
知识点:Java实现操作系统中的消费者生产者问题 一、消费者生产者问题概述 消费者生产者问题,也称为有界缓冲区问题,是并发编程中的经典问题,主要用来展示进程或线程之间的同步问题。该问题涉及两个类型的角色:...