public class ProducerConsumer{
public static void main(String[] args){
SyncStack ss = new SyncStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
new Thread(p).start();
new Thread(c).start();
}
}
class Wotou{
int id;
Wotou(int id){
this.id = id;
}
public String toString(){
return "Wotou:"+id;
}
}
class SyncStack{
int index = 0;
Wotou[] arrWT = new Wotou[6];
public synchronized void push(Wotou wt){
while(index == arrWT.length){
try {
this.wait();
} catch (InterruptedException e) {
System.out.println("SyncStack push wait被打断\n"+
e.getMessage());
}
}
this.notify(); //若有多个方法可用notifyAll()
arrWT[index] = wt;
index++;
}
public synchronized Wotou pop(){
while(index == 0){
try{
this.wait();
}catch(InterruptedException e){
System.out.println("SyncStack pop wait被打断\n"+
e.getMessage());
}
}
this.notify();
index--;
return arrWT[index];
}
}
class Producer implements Runnable{
SyncStack ss = null;
Producer(SyncStack ss){
this.ss = ss;
}
public void run(){
for(int i=0; i<20; i++){
Wotou wt = new Wotou(i);
ss.push(wt);
System.out.println("生产了:" + wt);
try{
Thread.sleep((int)(100*Math.random()));
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
SyncStack ss = null;
Consumer(SyncStack ss){
this.ss = ss;
}
public void run(){
for(int i=0; i<20; i++){
Wotou wt = ss.pop();
System.out.println("消费了:" + wt);
try{
Thread.sleep((int)(100*Math.random()));
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...
主线程、生产者线程(一)、消费者管理线程(一)、消费者线程(多),以及一些全局变量。 主线程职责:UI控件的控制和显示、控制生产者:调节生产的速度和暂停与继续、控制消费 生产者线程职责:根据商品数量调控...
通过以上步骤,我们可以在Delphi中实现一个多线程生产者消费者模式的应用。这种模式在处理大量数据输入和输出,以及需要高效利用系统资源的场景下尤其有用,如数据库导入导出、实时数据处理和网络通信等。理解并熟练...
在生产者消费者模式中,通常需要多个生产者和消费者线程,这些线程需要根据实际情况合理创建。 互斥量(Mutex)是一种简单的锁机制,用于保证共享数据在多线程访问时的互斥性,避免竞态条件。在生产者消费者模型中...
Java多线程编程是开发高...总结一下,Java中的生产者消费者模式利用了`BlockingQueue`等并发工具,实现了线程间的同步和协作,提高了程序的并发性能。理解并熟练运用这种模式,对于提升Java多线程编程的能力至关重要。
综上所述,C#中的生产者消费者模式涉及线程同步、数据结构、异常处理等多个知识点,理解和熟练运用这些概念对于编写高效、可靠的并发程序至关重要。通过实践和优化,我们可以创建出能充分利用多核处理器能力、运行...
java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...
生产者消费者模式是一种多线程或并发编程中的经典设计模式,它主要用于解决系统资源的高效利用和同步问题。在C++中实现生产者消费者模式,我们可以利用C++11及更高版本提供的线程库()、互斥量()、条件变量()等...
8. **死锁和饥饿**:在实现多线程生产者消费者模型时,必须警惕可能出现的死锁和饥饿问题。死锁是两个或更多线程相互等待对方释放资源导致的僵局,而饥饿则是指某一线程因为资源分配不公平而无法获得执行的机会。...
在这个“生产者与消费者”模式中,我们主要关注如何安全地共享资源,避免线程间的竞态条件和死锁。 生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者...
操作系统课程设计中的“生产者-消费者问题”是一个经典的并发编程模型,主要用来演示如何在多线程环境下协调生产者和消费者的行为,以达到资源的有效利用和避免数据竞争。在这个Java实现的小程序中,我们将深入探讨...
在描述中提到的链接(<https://ruyi574812039.iteye.com/blog/2097988>),博主分享了一个关于多线程生产者与消费者模式的具体实现案例。虽然具体代码没有给出,但我们可以根据常见的实现方式来解析这个模式。 1. *...
为了更好地理解和使用这个生产消费者队列,你可以通过创建一个生产者线程生成随机任务,同时创建多个消费者线程来处理这些任务。例如: ```csharp var workQueue = new WorkQueue(); // 生产者线程 Task.Run(() =>...
Java多线程生产者消费者模式是指在Java编程中,使用多线程来实现生产者和消费者之间的数据交换 и处理的模式。该模式下,生产者负责产生数据,而消费者负责处理数据。这种模式可以提高系统的性能和效率,特别是在高...
在C#编程中,"生产者消费者模型"是一种常见的多线程设计模式,它通过分离数据的生产和消费过程,使得生产者线程可以专心于创建数据,而消费者线程则专注于处理这些数据,两者互不干扰,提高了系统效率。在这个模型中...
生产者-消费者模式作为一种强大的设计模式,通过缓冲区协调生产者和消费者之间的数据交换,提高了系统的并发性和性能。它在多线程数据处理、任务队列、流数据处理和资源管理等领域具有广泛的应用。然而,生产者-消费...