Java Swing中的线程问题
/**
*
*/
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
[解决办法]
线程同步问题 只能先生产再包装
若没有生产就包装就会 没有商品了,等待…… wait()
等待生产完 notify()