📄 producer.java
字号:
/**
*
*/
package problem8_3;
import java.util.*;
/**
* @author Administrator
*
*/
public class Producer extends Thread{
// size和stringArray不写修饰符是为了方便同一包中的非子类Consumer和Producer的对象访问
StrArray pStrList;
// produceSize定义生产者可以生产多少数据
int produceSize;
// inputNum定义生产者已经生产了多少数据
int inputNum;
public Producer() {
}
public Producer(String producerName,StrArray aStrArray,int i) {
super(producerName);
pStrList=aStrArray;
produceSize=i;
inputNum=0;
//// 测试能否直接调用类数据成员s,事实证明可以
// System.out.println("呵呵"+pStrList.s[0]);
}
public void run() {
while(inputNum<produceSize) {
// 注意s的下标从0开始,而stringArray的size从1开始
System.out.println("Producer produce "+StrArray.S[inputNum]);
// 这里不是add StrArray.s[pStrList.stringArray.size()]是因为pStrList.stringArray.size()会随着str.remove()(在Consumer中)而改变,如果生产之中突然切换到Consumer,并执行了remove方法,那么size会改变,这样如果在切换回Producer,那么就会造成重复生产
pStrList.stringArray.add(StrArray.S[inputNum]);
inputNum++;
}
if(inputNum==produceSize) {
System.out.println(Thread.currentThread().getName()+"生产"+inputNum+"个数据完毕,结束生产");
System.out.println(Thread.currentThread().getName()+" end");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -