⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 producer.java

📁 一个简单的Java多线程的小例子。 a) Producer 生产 String
💻 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 + -