知识大全 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多线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 生产者消费者
Java多线程例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 写出一组模拟生产者/消费者的协
Java线程;生产消费者例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 小小回顾写了个简单的
线程的创建和启动 java语言已经内置了多线程支持所有实现Runnable接口的类都可被启动一个新线程新线程会执行该实例的run()方法当run()方法执行完毕后线程就结束了一旦一个线程执行
Java自带的Future多线程模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
Java多线程编程基础之线程和多线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 随着计算机技
Java多线程编程基础之线程对象 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
Java多线程开发之线程局部变量的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
实战Java多线程编程精要之高级支持 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 线程组 线
知识大全 Java多线程之ConcurrentHashMap深入分析
Java多线程之ConcurrentHashMap深入分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一