Java多线程解决生产者和消费者问题(面向对象)
来源:互联网 发布:好看的恐怖电影知乎 编辑:程序博客网 时间:2024/05/21 10:47
假设是生产者-->做面包-->>放到面包柜-->>消费者从面包柜买面包
这里我们需要以下几个类
1:首先,是面包类,叫Bread,它有个成员属性叫name,用于区分哪个面包
2:柜,它应该是用来放置面包使用的,叫Container,每个柜应该有自己的容纳空间,定义一个成员属性叫size
3:生产者类,Creator他有个成员方法,实现runnable接口
4:消费者类,Consumer有个成员方法,实现runnable接口
5:主线程类,控制程序运行
废话不多说,上代码:
MainThread.java
import java.util.ArrayList;public class MainThread {public static void main(String[] args){Container container = new Container();container.setIndex(0);container.setSize(20);container.setBreads(new ArrayList<Bread>());Creator creator1 = new Creator();Creator creator2 = new Creator();Consumer consumer = new Consumer();creator1.setContainer(container);creator2.setContainer(container);consumer.setContainer(container);new Thread(creator1).start();new Thread(creator2).start();new Thread(consumer).start();}}
Bread.java
public class Bread {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}
Container.java
import java.util.List;public class Container {private int size;private List<Bread> breads;private int index;public int getSize() {return size;}public void setSize(int size) {this.size = size;}public List<Bread> getBreads() {return breads;}public void setBreads(List<Bread> breads) {this.breads = breads;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}// 生产面包public synchronized void createBread() {while (index == size) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}this.notifyAll();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}Bread bread = new Bread();bread.setName("第 " + (index+1) + " 个面包");this.getBreads().add(bread);System.out.println("生产 "+ this.getBreads().get(this.getIndex()).getName());index++;this.setIndex(index);}//消费面包public synchronized void buyBread(){while(index == 0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}this.notifyAll();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("消费 "+this.getBreads().get(this.getIndex()-1).getName());this.getBreads().remove(index-1);index--;this.setIndex(index);}}
Creator.java
package com.wangkunfeng.threads;public class Creator implements Runnable{private Container container;//得到装面包的容器public void setContainer(Container container){this.container = container;}@Overridepublic void run() {for(int i =0 ;i<10;i++){this.container.createBread();}}}
Consumer.java
package com.wangkunfeng.threads;public class Consumer implements Runnable {private Container container;public void setContainer(Container container) {this.container = container;}@Overridepublic void run() {for (int i = 0; i < 20; i++) {this.container.buyBread();}}}
0 0
- Java多线程解决生产者和消费者问题(面向对象)
- Java多线程解决生产者消费者问题
- Java 多线程编程(生产者和消费者问题以及死锁)
- 生产者消费者问题(Java多线程)
- 多线程问题(生产者和消费者)
- java多线程 生产者消费者问题
- java多线程 生产者 消费者 问题 。。。
- Java 多线程:生产者消费者问题
- Java多线程生产者消费者问题
- Java多线程之生产者消费者问题<一>:使用synchronized 关键字解决生产者消费者问题
- Java 多线程 生产者和消费者
- Java多线程-生产者和消费者
- 面向对象写生产者与消费者的例子(java)
- NSCondition 多线程解决生产者消费者问题
- 多线程解决生产者与消费者问题
- java实现 生产者和消费者问题 多线程同步示例
- 用JAVA中的多线程示例生产者和消费者问题
- 关于Java多线程实现生产者和消费者的问题
- 题目1187:最小年龄的3个职工
- OpenGLES demo - 15. 阴影贴图 Shadow Map 之点光源
- poj 3400 Dropping the stones
- memset函数使用详解
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密
- Java多线程解决生产者和消费者问题(面向对象)
- hdu 1724 Ellipse(Simpson积分法)
- c语言左移右移
- 设计模式实现(十八)---桥接模式(Bridge)
- Android短信的备份
- navicat 结合快捷键 非常好用
- lazy懒加载(延迟加载)UITableView
- VB程序逆向反汇编常见的函数
- hdu 1048 The Hardest Problem Ever