`

多线程(一)生产者消费者问题!!!(原创)

 
阅读更多

 

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++ ;
	}

}

 

 

 

分享到:
评论

相关推荐

    java多线程实现生产者和消费者

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

    多线程代码 经典线程同步互斥问题 生产者消费者问题

    a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    Linux c语言多线程实现生产者/消费者问题

    以生产者/消费者问题为例来阐述Linux线程的控制和通信。一组生产者线程与一组消费者线程通过缓冲区发生联系。生产者线程将生产的产品送入缓冲区,消费者线程则从中取出产品。缓冲区有N 个,是一个环形的缓冲池。 ...

    c#多线程之生产者消费者

    3. **Semaphore**:Semaphore限制同时访问资源的数量,适合多生产者多消费者场景。生产者可以使用`Semaphore.Release`增加信号量,允许更多的消费者获取资源;消费者用`Semaphore.WaitOne`获取资源并处理,完成后...

    多线程解决生产者与消费者问题

    本文通过多线程方法解决了生产者与消费者之间同步的问题

    Linux 多线程实现生产者消费者模式.pdf

    Linux多线程实现生产者消费者模式涉及到操作系统中的多个重要知识点,包括多线程编程、生产者消费者模型、互斥量、条件变量等。在Linux环境下,这些功能可以通过POSIX线程(pthread)库来实现。下面详细解释这些知识...

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    12.2 Qt5多线程:使用信号量实现生产者和消费者

    生产者-消费者问题是并发编程中的一个经典模型,它描述了两个或多个线程之间的协作,其中一个或多个线程(生产者)负责生成数据,而其他线程(消费者)则负责处理这些数据。在实际应用中,这可以对应于例如数据生成...

    生产者和消费者模式多线程

    生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...

    java多线程实现生产者消费者关系

    在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...

    使用多线程程序模拟实现单生产者/多消费者问题(Linux下C语言)。

    使用多线程程序模拟实现单生产者/多消费者问题。 要求“生产者”随机产生一个整数,“消费者 1”将这个整数加 1 后输出,“消 费者 2”将这个整数加 2 后输出,“消费者 3”将这个整数加 3 后输出,“消 费者 4”将...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    用多线程同步方法解决生产者-消费者问题(操作系统课设

    生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...

    生产者消费者线程问题

    生产者消费者线程问题是多线程编程中的一个经典模型,主要用来解决资源的同步与协作问题。在操作系统课程设计中,这个模型常被用来教授线程间的通信与同步机制,帮助学生理解进程间的协调和资源管理。以下是关于生产...

    java多线程(生产者与消费者)

    生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...

    用多线程同步方法解决生产者-消费者问题

    生产者-消费者问题是多线程同步的一个经典案例,主要探讨如何在并发环境下,确保生产者进程和消费者进程之间正确地共享资源,避免数据竞争和死锁。在这个问题中,生产者进程负责创建产品并将产品放入缓冲区,而消费...

    生产者消费者为模型的多线程编程c#原创

    在C#编程中,"生产者消费者模型"是一种常见的多线程设计模式,它通过分离数据的生产和消费过程,使得生产者线程可以专心于创建数据,而消费者线程则专注于处理这些数据,两者互不干扰,提高了系统效率。在这个模型中...

    生产者-消费者的Linux多线程实现.pdf

    本文将详细地阐述 Linux 下利用互斥锁、条件变量、线程管理等相关函数实现多线程生产者-消费者问题,以提高资源利用率。 线程基本概念 线程是进程的一条执行路径,它包含独立的堆栈和 CPU 寄存器状态,每个线程...

Global site tag (gtag.js) - Google Analytics