黑马程序员技术交流社区
标题:
多线程的生产者和消费者问题
[打印本页]
作者:
黑马-小龙
时间:
2013-1-27 23:49
标题:
多线程的生产者和消费者问题
本帖最后由 张向辉 于 2013-1-29 12:14 编辑
package cn.itcast.string;
public class ProducerAndConsumer {
/**
* 演示生产者与消费者例子
* @param args
*/
public static void main(String[] args) {
BreadBar bb = new BreadBar();//创建包子柜台对象
Chef chef = new Chef(bb);
Consumer cs = new Consumer(bb);
chef.start();
cs.start();
}
}
//这里是包子柜台类
class BreadBar{
private int count ;//定义一个私有的包子数量属性
//设置包子数量的getCount()方法
public void setCount(int count){
this.count = count;
}
//获取包子数的方法
public int getCount(){
return count;
}
//定义一个吃包子的的eat()方法
public void eat(){
System.out.println("正在吃包子。。。。");
count -= count;
}
//定义一个做包子的make()方法
public void make(){
System.out.println("师傅,给我做几笼包子!!!!");
count += count;
}
}
//厨师类
class Chef extends Thread{
private BreadBar breadBar;//定义一个包子柜台的属性
public Chef(BreadBar bb) {
// TODO Auto-generated constructor stub
}
//重写线程类的run()方法
public void run(){
synchronized(breadBar){
while(true) {//死循环:while(true)。只要没包子就做,不怕累死;
if(breadBar.getCount() < 0){
breadBar.make();
this.notify();
}
else{
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
//顾客类
class Consumer extends Thread{
private BreadBar breadBar;//定义一个包子柜台的属性
public Consumer(BreadBar bb) {
// TODO Auto-generated constructor stub
}
//重写线程类的run()方法
public void run(){
synchronized(breadBar){
while(true) {//死循环:while(true)。只要没包子就做,不怕累死;
if(breadBar.getCount() > 0){
breadBar.eat();
}
else{
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.notify();
}
}
}
}
}
复制代码
写了一个小时,麻烦大神帮我看看啊 !!!!
作者:
逍林游
时间:
2013-1-28 11:07
[code]public class ProducerAndConsumer {
/**
* 演示生产者与消费者例子
* @param args
*/
public static void main(String[] args) {
BreadBar bb = new BreadBar();//创建包子柜台对象
Chef chef = new Chef(bb);
Consumer cs = new Consumer(bb);
new Thread(chef).start();
new Thread(cs).start();
}
}
//这里是包子柜台类
class BreadBar{
private static int count = 0 ;//定义一个私有的包子数量属性
//定义一个吃包子的的eat()方法
public synchronized void eat(){
if(count<0)
try{wait();}catch(Exception e){}
System.out.println("正在吃包子。。。。");
count --;
if(count<0)
notify();
}
//定义一个做包子的make()方法
public synchronized void make(){
if(count > 0)
try{wait();}catch(Exception e){}
System.out.println("师傅,给我做几笼包子!!!!");
count ++;
if(count >=1)
notify();
}
}
//厨师类
class Chef implements Runnable {
private BreadBar breadBar;//定义一个包子柜台的属性
public Chef(BreadBar bb) {
// TODO Auto-generated constructor stub
breadBar = bb;
}
//重写线程类的run()方法
public void run(){
while(true){
breadBar.make();
}
}
}
//顾客类
class Consumer implements Runnable{
private BreadBar breadBar;//定义一个包子柜台的属性
public Consumer(BreadBar bb) {
// TODO Auto-generated constructor stub
breadBar = bb;
}
//重写线程类的run()方法
public void run(){
while(true){
breadBar.eat();
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2