知识大全 java多线程之消费者生产者模式

Posted 生产者

篇首语:努力到无能为力,拼搏到感动自己本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java多线程之消费者生产者模式相关的知识,希望对你有一定的参考价值。

  /*@author shijin * 生产者与消费者模型中 要保证以下几点 * 同一时间内只能有一个生产者生产     生产方法加锁sychronized * 同一时间内只能有一个消费者消费     消费方法加锁sychronized * 生产者生产的同时消费者不能消费     生产方法加锁sychronized * 消费者消费的同时生产者不能生产     消费方法加锁sychronized * 共享空间空时消费者不能继续消费     消费前循环判断是否为空 空的话将该线程wait 释放锁允许其他同步方法执行* 共享空间满时生产者不能继续生产     生产前循环判断是否为满 满的话将该线程wait 释放锁允许其他同步方法执行*/

  //主类class  ProducerConsumer public static void main(String[] args)

   StackBasket s = new StackBasket() Producer p = new Producer(s) Consumer c = new Consumer(s) Thread tp = new Thread(p) Thread tc = new Thread(c) tp start() tc start()

  // class Mantou private int id

  Mantou(int id) this id = id

  public String toString() return Mantou + id

  //共享栈空间class StackBasket Mantou sm[] = new Mantou[ ] int index =

  /** * show 生产方法

  * show 该方法为同步方法 持有方法锁 * show 首先循环判断满否 满的话使该线程等待 释放同步方法锁 允许消费 * show 当不满时首先唤醒正在等待的消费方法 但是也只能让其进入就绪状态 * show 等生产结束释放同步方法锁后消费才能持有该锁进行消费* @param m 元素* @return 没有返回值*/

  public synchronized void push(Mantou m) try while(index == sm length) System out println( !!!!!!!!!生产满了!!!!!!!!! ) this wait() this notify() catch(InterruptedException e) e printStackTrace() catch(IllegalMonitorStateException e) e printStackTrace()

  sm[index] = m index++ System out println( 生产了 + m + 共 + index + 个馒头 )

  /** * show 消费方法* show 该方法为同步方法 持有方法锁* show 首先循环判断空否 空的话使该线程等待 释放同步方法锁 允许生产 * show 当不空时首先唤醒正在等待的生产方法 但是也只能让其进入就绪状态* show 等消费结束释放同步方法锁后生产才能持有该锁进行生产* @param b true 表示显示 false 表示隐藏* @return 没有返回值*/ public synchronized Mantou pop() try while(index == ) System out println( !!!!!!!!!消费光了!!!!!!!!! ) this wait() this notify() catch(InterruptedException e) e printStackTrace() catch(IllegalMonitorStateException e) e printStackTrace() index—— System out println( 消费了 —— + sm[index] + 共 + index + 个馒头 ) return sm[index]

  class Producer implements Runnable StackBasket ss = new StackBasket() Producer(StackBasket ss) this ss = ss

  /** * show 生产进程

  */ public void run() for(int i = i < i++) Mantou m = new Mantou(i) ss push(m) //          System out println( 生产了 + m + 共 + ss index + 个馒头 ) //          在上面一行进行测试是不妥的 对index的访问应该在原子操作里 因为可能在push之后此输出之前又消费了 会产生输出混乱try Thread sleep((int)(Math random()* )) catch(InterruptedException e) e printStackTrace()

  class Consumer implements Runnable StackBasket ss = new StackBasket() Consumer(StackBasket ss) this ss = ss

  /** * show 消费进程

cha138/Article/program/Java/hx/201311/26006

相关参考

知识大全 由生产者/消费者问题看JAVA多线程

由生产者/消费者问题看JAVA多线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  生产者消费者

知识大全 Java多线程例子

Java多线程例子  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  写出一组模拟生产者/消费者的协

知识大全 Java线程;生产消费者例子

Java线程;生产消费者例子  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  小小回顾写了个简单的

知识大全 高级应用 java多线程设计模式详解之一

  线程的创建和启动    java语言已经内置了多线程支持所有实现Runnable接口的类都可被启动一个新线程新线程会执行该实例的run()方法当run()方法执行完毕后线程就结束了一旦一个线程执行

知识大全 Java自带的Future多线程模式

Java自带的Future多线程模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 Java多线程编程基础之线程和多线程

Java多线程编程基础之线程和多线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着计算机技

知识大全 Java多线程编程基础之线程对象

Java多线程编程基础之线程对象  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 Java多线程开发之线程局部变量的使用

Java多线程开发之线程局部变量的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 实战Java多线程编程精要之高级支持

实战Java多线程编程精要之高级支持  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  线程组  线

知识大全 Java多线程之ConcurrentHashMap深入分析

Java多线程之ConcurrentHashMap深入分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一