您的位置:首页 > 编程语言 > Java开发

Java_生产者消费者模式

2014-03-23 22:51 309 查看
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package testdemo1;

import java.util.logging.Level;
import java.util.logging.Logger;

class Mantou {

private int id;

public Mantou(int val) {
this.id = val;
}

public String toString() {
return "Mantou id: " + this.id;
}
}

class Basket {

private Mantou[] mStack = new Mantou[6];
private int index = 0;

public synchronized void push(Mantou m) {
while (index == mStack.length) {
try {
this.wait();
System.out.println("full........................!!!");

} catch (InterruptedException ex) {
Logger.getLogger(Basket.class.getName()).log(Level.SEVERE, null, ex);
}
}
this.notify();

mStack[index] = m;

index++;

System.out.println("add Mantou id= " + m + " and index= " + index);

}

public synchronized Mantou pop() {

while (index == 0) {

try {
System.out.println("empty........................!!!");
wait();
} catch (InterruptedException ex) {
Logger.getLogger(Basket.class.getName()).log(Level.SEVERE, null, ex);
}
}
this.notify();
index--;
Mantou m = mStack[index];
System.out.println("get Mantou id= " + m + " and index= " + index);

return m;
}
}

class Producer implements Runnable {

private Basket brasket = new Basket();

public Producer(Basket val) {
this.brasket = val;
}

@Override
public void run() {
for (int i = 0; i < 20; i++) {
Mantou m = new Mantou(i);
brasket.push(m);

try {
//            Thread.sleep(Math);
Thread.sleep((int) (Math.random() * 500));
} catch (InterruptedException ex) {
Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex);
}

}
}

}

class Consumer implements Runnable {

private Basket brasket = new Basket();

public Consumer(Basket val) {
this.brasket = val;
}

@Override
public void run() {
for (int i = 0; i < 20; i++) {
Mantou m = brasket.pop();
try {
Thread.sleep((int) (Math.random() * 1000));
} catch (InterruptedException ex) {
Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}

public class TestDemo1 {

public static void main(String[] args) {
// TODO code application logic here
Basket s = new Basket();
Producer producer = new Producer(s);
Consumer consumer = new Consumer(s);
Thread tr1 = new Thread(producer);
Thread tr2 = new Thread(consumer);
tr1.start();
tr2.start();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java