/**
 * 
 */
package com.thread;import java.util.Vector;/**
 * @author Administrator
 *
 *//***** 线程通信实现生产者/消费者模型 *******/
// 产品类
class Production {
int number; // 构造方法
public Production(int number) {
this.number = number;
}
}// 向量类
@SuppressWarnings( { "serial", "unchecked" })
class myVector extends Vector {
public static int inNumber; // 构造方法
public myVector() {
super(1, 1);
} // 向容器中添加元素
synchronized void putElement() {
// 向量里有10个对象,容器满
if (this.size() == 10) {
System.out.println("没有空间了,等待……");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
inNumber++; Production production = new Production(inNumber); // 向容器中添加产品
this.addElement(production); System.out.println("生产产品:" + production.number); notify();
}
} // 从容器中移除产品
synchronized void getElement() {
// 向量空,容器空
if (this.isEmpty()) {
System.out.println("没有商品了,等待……");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} // 返回索引处的组件
Production production = (Production) elementAt(0); System.out.println("包装产品:" + production.number); // 移除容器中已包装好的产品
this.removeElementAt(0); notify();
}
}// 消费者
class Consume implements Runnable {
myVector vector; // 构造方法
public Consume(myVector vector) {
this.vector = vector; new Thread(this).start();
} @Override
public void run() {
while (true) {
Double d = new Double(Math.random() * 1000); try {
Thread.sleep(d.intValue());
} catch (InterruptedException e) {
e.printStackTrace();
} // 获得产品
vector.getElement();
}
}
}public class Product implements Runnable { myVector vector; public Product(myVector vector) {
this.vector = vector; new Thread(this).start();
} @Override
public void run() { while (true) {
try {
Thread.sleep((int) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
} // 向容器中添加商品
vector.putElement();
} } public static void main(String[] args) { myVector myvector = new myVector(); new Product(myvector);
new Consume(myvector); }}运行结果如下:
生产产品:1
包装产品:1
没有商品了,等待……
生产产品:2
包装产品:2
没有商品了,等待……
生产产品:3
包装产品:3
没有商品了,等待……
生产产品:4
包装产品:4
没有商品了,等待……
生产产品:5
包装产品:5
生产产品:6
包装产品:6
生产产品:7
包装产品:7
没有商品了,等待……
生产产品:8
包装产品:8
没有商品了,等待……
生产产品:9
包装产品:9
没有商品了,等待……
生产产品:10
包装产品:10
没有商品了,等待……
生产产品:11
包装产品:11
生产产品:12
包装产品:12
生产产品:13
包装产品:13
没有商品了,等待……
生产产品:14
包装产品:14
没有商品了,等待……
生产产品:15
包装产品:15
没有商品了,等待……
生产产品:16
包装产品:16
生产产品:17
包装产品:17
生产产品:18
生产产品:19
包装产品:18
生产产品:20
生产产品:21
生产产品:22
包装产品:19
生产产品:23
生产产品:24
包装产品:20
生产产品:25
生产产品:26
包装产品:21
包装产品:22
生产产品:27
生产产品:28
包装产品:23
生产产品:29
包装产品:24
生产产品:30
生产产品:31
包装产品:25
生产产品:32
生产产品:33
包装产品:26
包装产品:27
包装产品:28
包装产品:29
包装产品:30
生产产品:34
包装产品:31
包装产品:32
生产产品:35
包装产品:33
生产产品:36
生产产品:37
包装产品:34
包装产品:35
包装产品:36
生产产品:38
生产产品:39
包装产品:37
包装产品:38
生产产品:40
生产产品:41
包装产品:39
包装产品:40
生产产品:42
生产产品:43
生产产品:44
包装产品:41
包装产品:42
生产产品:45
生产产品:46
包装产品:43
包装产品:44
包装产品:45
生产产品:47
包装产品:46
包装产品:47
生产产品:48
生产产品:49
包装产品:48
包装产品:49
生产产品:50
包装产品:50
没有商品了,等待……
生产产品:51
包装产品:51
没有商品了,等待……
生产产品:52
包装产品:52
生产产品:53
生产产品:54
生产产品:55
生产产品:56
包装产品:53
生产产品:57
包装产品:54
生产产品:58
包装产品:55
包装产品:56
生产产品:59
生产产品:60
包装产品:57
包装产品:58
包装产品:59
生产产品:61
包装产品:60
生产产品:62
包装产品:61
生产产品:63
包装产品:62
包装产品:63
生产产品:64
包装产品:64
生产产品:65
生产产品:66 请问朋友们:能不能给我解释一下运行的结果?谢谢!!!
 热心者加我QQ897948924