IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA 多线程练习题:手机工厂 -> 正文阅读

[Java知识库]JAVA 多线程练习题:手机工厂

?

目录

一.题目:

二.思路:

PhoneTask

主函数:

三.参考代码


一.题目:

有一个制造手机工厂,根据订单来安排人员生产。
现在有以下的订单:
[1] 1000台, Sumsung 手机。
[2] 500台,iPhone手机。
[3] 880台,小米手机。
[4] 1800台,Nodia手机。
[5] 1400台,黑莓手机。
工厂请的都是临时工,每生产完一批订单,
又重新请一批人,随机生成人数(5-15人左右)。
每个人的生产效率也是不一样的。
打印每批工人的生产冠军(产量第-一)。

二.思路:

PhoneTask

1.使用多线程,继承Runnable

2.成员变量:生产手机的总数、每个员工生产了多少(用数组存储)、taskName代表生产的手机型号

3.构造器

4.printNo1() 打印第一名的方法

5.delay(int ms)延时的方法

6.run方法:每个工人的线程名是自己命名的,假设命名为:worker1,worker2....

?用replace()方法获得索引号:1,2,3....

把索引号转为int类型

这样就可以通过produces【索引号】来知道是第几个工人了

用随机数来随机决定延时多久,也就是某个工人做多久

7.同步锁(定义一个taskName代表生产的手机型号):剩余量-1,某个工人生产数+1

主函数:

1.定义一个订单类,构造方法中获得taskName,count

2.创建订单对象,调用main函数中的prodece(order1)方法

3.prodece(Order order)

(1)使用随机数生成工人数 5-8

(2)生成任务

(3)生成线程:使用数组和循环

(4)创建及开启线程:循环 start()

(5)等待所有人线程执行完成:循环? join()

(6)打印第一名

三.参考代码

package com.gongsi.cn.test7;
//手机工厂
public class PhoneTask implements Runnable{

	//成员变量
	private int count;//当前任务的任务量(手机总数)
	private int[] produces ;//每个工人的生产数
	private String taskName;
	
	//构造器
	public PhoneTask(String taskName,int count,int workerCnt) {
		this.taskName=taskName;
		this.count=count;
		//下标从1开始算
		this.produces=new int[workerCnt+1];
		
	}

	@Override
	public void run() {
		//每个工人的线程名是这样命名的(创建线程的时候自己命名的):worker1,worker2......
		String name=Thread.currentThread().getName();
		//获取索引号 1,2,3.... 
		String n=name.replace("worker", "");
		//转为int类型
		int no=Integer.valueOf(n);
		while (count>0) {
			//生成速度 10-20ms
			int speed = (int) ((Math.random()*11)+10);
			delay(speed);
			synchronized (taskName) {
				count--;//剩余量-1
				produces[no]++;//某个工人生产数+1
			}
		}
		
	}
	
	//打印第一名:不含并列第一名
	public void printNo1() {
		int max=0;
		int maxId=0;
		for (int i = 0; i < produces.length; i++) {
			System.out.println(i+"生产数:"+produces[i]);
			if (max<produces[i]) {
				maxId=i;
				max=produces[i];
			}
		}
		System.out.println("产量冠军是工人"+maxId+",产量:"+max);
	}
	
	//延时
	public void delay(int ms) {
		try {
			Thread.sleep(ms);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	

}
package com.gongsi.cn.test7;

public class TestMain {
	public static void main(String[] args) throws Exception {
		Order order1=new Order("红米K30,105");
		prodece(order1);
	}

	  static void prodece(Order order) throws Exception {
		//生成工人数 5-8
		int workCnt=(int) ((Math.random()*4)+5);
		
		//生成任务
		PhoneTask task=new PhoneTask(order.taskName, order.count, workCnt);
		
		//生成线程 有多少个工人就有多少个线程
		Thread[] ths=new Thread[workCnt+1];
		for (int i = 0; i <=workCnt; i++) {
			ths[i]=new Thread(task,"worker"+i);
		}
		//创建及开启线程
		for (int i = 0; i < workCnt; i++) {
			ths[i].start();
		}
		
		//等待所有人线程执行完成
		for (int i = 0; i < workCnt; i++) {
			ths[i].join();//等待
		}
		
		//打印第一名
		task.printNo1();
	}

}

//订单类
class Order{
	public String taskName;
	public int count;
	public Order(String c) {
		String[] date=c.split(",");
		taskName=date[0];
		count=Integer.valueOf(date[1]);
	}
}

不知道为什么它还是从0开始.....

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:36:30  更:2021-09-09 11:38:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:39:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码