202103010多线程工厂生产实战

一:

创建工厂类Factory 属性:车间类WorkShop的对象的集合worShops,仓库的容量 int capability

方法:

1、加工玩具方法 product:各车间同时工作(多线程,多线程需要设置名称:车间1、车间2、车间3), 根据仓库的容量平均分配给各车间需要加工玩具的数量 12个玩具,3个车间

2、建造车间方法createWorkShop:向集合worShops添加一个新的车间

二:

车间类WorkShop 属性:车间名称

方法:车间名称的setter、getter 要求:使用多线程模拟加工玩具功能,假设2秒完成一个玩具,每个车间完成一个玩具后,打印玩具的已经完成的数量 实现测试类

package com.factoryProduce.demo;

import java.util.ArrayList;

public class Factory {
	private int capability =12;//这个bug没有找出来,test类中构造传参12没有效果。
	private WorkShop[] shop = new WorkShop[5];
	private static ArrayList<WorkShop> shopList = new  ArrayList<WorkShop>();
	private int WorkShopNum = 0; 

	public int getWorkShopNum() {
		return WorkShopNum;
	}

	public void setWorkShopNum(int workShopNum) {
		WorkShopNum = workShopNum;
	}

	//给私有属性提供getter\setter方法
	public int getCapability() {
		return capability;
	}

	public WorkShop[] getShop() {
		return shop;
	}

	public void setShop(WorkShop[] shop) {
		this.shop = shop;
	}

	public static ArrayList<WorkShop> getShopList() {
		return shopList;
	}

	public static void setShopList(ArrayList<WorkShop> shopList) {
		Factory.shopList = shopList;
	}

	public void setCapability(int capability) {
		this.capability = capability;
	}
	//构造方法
	
	public Factory() {
		
	}
	public Factory(int capability) {
		setCapability(capability);
	}
	
	//成员方法
	public int count() {
		int average = this.capability / this.shopList.size(); 
		return average;
	}
	public void creatWorkShop(String name) {
		int i = this.WorkShopNum;
		//使用new处于新建状态
		this.shop[i] = new WorkShop();
		this.shop[i].setName(name);
		shopList.add(shop[i]);
		this.WorkShopNum++;
	}
	
	//factory下令workShop开始生产
	public void product() {
		for(int i = 0;i < WorkShopNum;i++) {
			Thread shopThread =new Thread(shop[i]);
			shopThread.start();
		}
	}

}

package com.factoryProduce.demo;

public class WorkShop extends Factory implements Runnable {
	private String name;
	private int produtNum = 0;

	public String getName() {
		return name;
	}

	public int getProdutNum() {
		return produtNum;
	}

	public void setProdutNum(int produtNum) {
		this.produtNum = produtNum;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	//构造方法
	public WorkShop() {
		
	}
	public WorkShop(String name) {
		this.name = name;
	}


	@Override
	public void run() {
		// TODO Auto-generated method stub
		int j = count();
		for(int i = 0;i <= count();i++) {
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			this.produtNum = i;
			System.out.println(this.name+"已经生产了"+ i + "件");
			if(i == count()) {
				System.out.println(this.name+"生产完毕");
			}
		}
	}


}

package com.factoryProduce.demo;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Factory toyFactory = new Factory(12);

		String name1 = "车间一";
		String name2 = "车间二";
		String name3 = "车间三";

		toyFactory.creatWorkShop(name1);
		toyFactory.creatWorkShop(name2);
		toyFactory.creatWorkShop(name3);
		//start处于就绪状态
		
		toyFactory.product();

	}

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值