这段代码是在听了马老师的教程后写的,小小的ps一下,听马老师讲课感觉真的很好,期望他能出一些j2ee的视频教程
package cn.zhangxuemin.j2se;
public class TestProducerConsumer {
public static void main(String[] args) {
SyncStack ss = new SyncStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
Thread t1 = new Thread(p,"t1");
Thread t2 = new Thread(p,"t2");
Thread t3 = new Thread(c,"t3");
t1.start();
t2.start();
t3.start();
}
}
class Woto {
int id ;
Woto (int id) {
this.id = id;
}
public String toString () {
return "Woto :"+id;
}
}
class SyncStack {
int index = 0;
Woto[] arryWoto = new Woto[6];
public synchronized void push(Woto wt) {
while(index == arryWoto.length) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
arryWoto[index] = wt;
index++;
}
public synchronized Woto pop() {
while(index == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
index--;
return arryWoto[index];
}
}
class Producer implements Runnable {
SyncStack ss = null;
Producer(SyncStack ss) {
this.ss = ss;
}
public void run() {
for(int i=0; i<20; i++) {
Woto wt = new Woto(i);
ss.push(wt);
System.out.println(Thread.currentThread().getName()+"生产了: "+wt);
}
}
}
class Consumer implements Runnable {
SyncStack ss = null;
Consumer(SyncStack ss) {
this.ss = ss;
}
public void run() {
for(int i=0; i<40; i++) {
Woto wt = ss.pop();
System.out.println(Thread.currentThread().getName()+"消费了: " +wt);
}
}
}
分享到:
相关推荐
在计算机科学中,生产者-消费者问题是一个经典的同步问题,描述了多个进程之间的协作和资源竞争。在这里,我们将讨论使用记录型信号量解决生产者-消费者问题的方法。 生产者-消费者问题 生产者-消费者问题是一个...
生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...
1、设计目的:通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为1-20个整数。 3、设计要求: 生产者和消费者进程的数目不固定,可...
- **多个生产者和消费者**:至少有两个生产者和消费者进程,他们之间需要共享对缓冲区操作的函数代码。 - **显示状态**:每个生产者和消费者在操作后需要显示缓冲区的当前状态,包括全部内容、当前指针位置以及执行...
生产者-消费者问题是计算机科学中的一个经典问题,主要涉及多线程或多进程同步。这个问题在操作系统课程中常被用来讲解进程间的通信和同步机制。在这个场景中,我们讨论的是在Linux环境下,如何通过多进程的方式解决...
这个模型是基于一个假设:有一个缓冲区,生产者线程负责往里面放入产品,而消费者线程则负责取出并消费这些产品。 在操作系统实验中,实现生产者-消费者模型可以帮助我们理解线程的同步机制,如互斥锁(mutex)和...
生产者-消费者模型通常包括两个角色:生产者进程负责生成数据,而消费者进程则负责消费这些数据。在一个共同的数据缓冲区中,生产者将产品放入,消费者从中取出。关键在于,当缓冲区满时,生产者应停止生产直到消费...
在生产者-消费者问题中,用于保证同一时间只有一个线程(生产者或消费者)可以访问缓冲区。 - **信号量(Semaphore)**:用于控制对公共资源的访问数量,可以理解为一种计数器。在这里,我们可以使用一个二进制信号...
生产者-消费者模型涉及到两个主要角色:生产者(Producer)和消费者(Consumer)。生产者负责生成数据或产品,并将其放入一个共享的缓冲区;而消费者则从这个缓冲区中取出并消费这些数据或产品。在我们的例子中,有...
生产者消费者问题,C++。生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者...
生产者-消费者问题是一个经典的进程同步问题,涉及到两个进程(或线程)——生产者和消费者。生产者负责生产数据项并将其放入一个共享缓冲区,而消费者则从这个缓冲区中取出数据项进行处理。为了保证正确性,需要...
1.利用记录型信号量解决生产者-消费者问题.odt1.利用记录型信号量解决生产者-消费者问题.odt1.利用记录型信号量解决生产者-消费者问题.odt
内含多个实验文档与可运行的代码 ...1. 生产者消费者对缓冲区进行互斥操作。 2. 缓冲区大小为10,缓冲区满则不允许生产者生产数据,缓冲区空则不允许消费者消费数据。 3. 生产者消费者各循环操作10次。
在本项目中,我们将探讨这个问题,并以C++语言为基础,创建一个在Windows 2000环境下运行的控制台应用程序,通过多线程模拟生产者和消费者的行为。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型中,...
以记录型信号量实现生产者-消费者问题 实验目的: 1.加深对进程同步概念的理解。 2.理解多道程序环境中,不同进程对资源访问及相互合作进程的关系的处理方法。 实验要求: 利用C语言程序模拟生产者-消费者问题和哲学...
在生产者-消费者问题中,需要确保消费者不会从空缓冲区中读取数据,同时生产者也不会向满缓冲区写入数据。 - **互斥**:指同一时间内只有一个进程可以访问某个资源或执行某段代码。在本例中,有界缓冲区作为一个...
- 在生产者-消费者问题中,对缓冲区的读写操作需要互斥锁来保护,确保在任一时刻,只允许一个线程(生产者或消费者)操作缓冲区。 5. **信号量**: - 信号量是另一种同步机制,它可以表示和控制资源的数量。 - ...
一个有n个缓冲区的缓冲池,生产者一次向一个缓冲区中投入消息,消费者从一个缓冲区中取得。生产者——消费者问题实际上是相互合作进程关系的一种抽象。该类问题不允许消费者进程到一个空缓冲区中取产品,同时也不...
设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区...