package test; /** * @author E-mail:xhf@126.com * @version 创建时间:2011-11-21 上午09:14:58 * 类说明 */ public class CaoYang { static public void main(String[] args){ Loufeng loufeng=new Loufeng(3) ; new XiaoJie("嘉新",loufeng,1000).start() ; new XiaoJie("萝莉",loufeng,1000).start() ; new XiaoJie("诗情",loufeng,1000).start() ; new KeRen("张三",loufeng,1000).start() ; new KeRen("李四",loufeng,1000).start() ; new KeRen("王五",loufeng,1000).start() ; } }
package test;
import java.util.Random; /** * @author E-mail:xhf@126.com * @version 创建时间:2011-11-21 上午09:14:04 * 类说明 */ public class KeRen extends Thread{ private final Random random ; private final Loufeng loufeng ; public KeRen(String name ,Loufeng loufeng,long l){ super(name) ; this.loufeng=loufeng ; random=new Random(l) ; } public void run(){ try{ while(true){ String cake=loufeng.get() ; System.out.println("完成交易:"+cake) ; Thread.sleep(random.nextInt(1000)) ; } }catch(Exception e){ e.printStackTrace() ; } } }
package test;
/** * @author E-mail:xhf@126.com * @version 创建时间:2011-11-21 上午09:14:42 * 类说明 */ public class Loufeng { private int count ; private int zou ;//当前要出台的 private int hui ;//当前新回来的 private final String buffer[] ; public Loufeng(Integer sum){ this.buffer=new String[3] ; this.count=0 ; this.zou=0 ; this.hui=0 ; } public synchronized void put(String xiaoj) throws InterruptedException{ System.out.println(Thread.currentThread().getName()+xiaoj) ; while(count>=buffer.length){ wait() ; } buffer[hui]=xiaoj ; hui=(hui+1)%buffer.length ; count++ ; System.out.println("库存量=============="+count) ; this.notifyAll() ; } public synchronized String get() throws InterruptedException{ while(count<=0){ wait() ; } String taak=buffer[zou] ; zou=(zou+1)%buffer.length ; count-- ; this.notifyAll() ; System.out.println(Thread.currentThread().getName()+"准备带走"+taak) ; return taak; } }
package test;
import java.util.Random; /** * @author E-mail:xhf@126.com * @version 创建时间:2011-11-21 上午09:20:59 * 类说明 */ public class XiaoJie extends Thread{ private final Random random ; private final Loufeng loufeng ; private static int i=0 ; public XiaoJie(String name ,Loufeng loufeng,long feed){ super(name) ; this.loufeng=loufeng ; this.random=new Random(feed) ; } public void run(){ while(true){ try { Thread.sleep(random.nextInt(1000)) ; String cha="序号"+getid()+"===姓名:"+this.getName(); loufeng.put(cha) ; } catch (InterruptedException e) { e.printStackTrace(); } } } public static final int getid(){ return i++ ; } }
相关推荐
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
以生产者/消费者问题为例来阐述Linux线程的控制和通信。一组生产者线程与一组消费者线程通过缓冲区发生联系。生产者线程将生产的产品送入缓冲区,消费者线程则从中取出产品。缓冲区有N 个,是一个环形的缓冲池。 ...
3. **Semaphore**:Semaphore限制同时访问资源的数量,适合多生产者多消费者场景。生产者可以使用`Semaphore.Release`增加信号量,允许更多的消费者获取资源;消费者用`Semaphore.WaitOne`获取资源并处理,完成后...
本文通过多线程方法解决了生产者与消费者之间同步的问题
Linux多线程实现生产者消费者模式涉及到操作系统中的多个重要知识点,包括多线程编程、生产者消费者模型、互斥量、条件变量等。在Linux环境下,这些功能可以通过POSIX线程(pthread)库来实现。下面详细解释这些知识...
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
生产者-消费者问题是并发编程中的一个经典模型,它描述了两个或多个线程之间的协作,其中一个或多个线程(生产者)负责生成数据,而其他线程(消费者)则负责处理这些数据。在实际应用中,这可以对应于例如数据生成...
生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...
在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...
使用多线程程序模拟实现单生产者/多消费者问题。 要求“生产者”随机产生一个整数,“消费者 1”将这个整数加 1 后输出,“消 费者 2”将这个整数加 2 后输出,“消费者 3”将这个整数加 3 后输出,“消 费者 4”将...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...
生产者消费者线程问题是多线程编程中的一个经典模型,主要用来解决资源的同步与协作问题。在操作系统课程设计中,这个模型常被用来教授线程间的通信与同步机制,帮助学生理解进程间的协调和资源管理。以下是关于生产...
生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...
生产者-消费者问题是多线程同步的一个经典案例,主要探讨如何在并发环境下,确保生产者进程和消费者进程之间正确地共享资源,避免数据竞争和死锁。在这个问题中,生产者进程负责创建产品并将产品放入缓冲区,而消费...
在C#编程中,"生产者消费者模型"是一种常见的多线程设计模式,它通过分离数据的生产和消费过程,使得生产者线程可以专心于创建数据,而消费者线程则专注于处理这些数据,两者互不干扰,提高了系统效率。在这个模型中...
本文将详细地阐述 Linux 下利用互斥锁、条件变量、线程管理等相关函数实现多线程生产者-消费者问题,以提高资源利用率。 线程基本概念 线程是进程的一条执行路径,它包含独立的堆栈和 CPU 寄存器状态,每个线程...