JAVA入门_多线程_邮局派发信件

Postman

package cn.campsg.java.experiment.entity;

public class Postman {
private String postName;
private int mailCount;

public String getPostName() {
return postName;
}

public void setPostName(String postName) {
this.postName = postName;
}

public int getMailCount() {
return mailCount;
}

public void setMailCount(int mailCount) {
this.mailCount = mailCount;
}

public Postman() {
}

public Postman(String postName, int mailCount) {
this.postName = postName;
this.mailCount = mailCount;
}

}

SendMails

package cn.campsg.java.experiment.entity;

public class SendMails extends Thread {
private Postman post;

public Postman getPost() {
return post;
}

public void setPost(Postman post) {
this.post = post;
}

public SendMails() {
}

@Override
public void run() {
int count = 0;
while (post.getMailCount() > 0) {
System.out.println(post.getPostName() + " 还有" + post.getMailCount() + "封信。开始送第 " + (++count) + "封信!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
post.setMailCount(post.getMailCount() - 1);
}
System.out.println(post.getPostName() + " 已完成所有邮件派送!。");
}
}

MainClass

package cn.campsg.java.experiment;

import cn.campsg.java.experiment.entity.Postman;
import cn.campsg.java.experiment.entity.SendMails;

public class MainClass {
public static void main(String[] args) {
System.out.println("邮递员接收派发任务后开始送信:");
for (int i = 0; i < 5; i++) {
int mCount = (int) (1 + Math.random() * 10);
Postman postman = new Postman("邮递员" + i, mCount / 2);
SendMails sendMails = new SendMails();
sendMails.setPost(postman);
new Thread(sendMails).start();
}
}
}

题目描述

本实验要求:以邮局送件为背景,模拟多人同时派发邮件,体验多线程的实际应用。

业务说明:
1.1. 本实验以实际生活中邮局派发邮件为业务背景。
1.2. 通常邮局每天都会有大量的邮件需要邮递员派发。
1.3. 根据邮件的性质以及发往地点的不同,安排不同人送件。
1.4. 为了快速处理好每日的发件工作,邮局需要安排多人同时发件。
1.5. 每个发件人每日定量发件,并将邮件逐一派发给不同收件人。
1.6. 本业务关键概念:邮递员、派件数量以及同时发件。
创建工程并配置环境:
2.1. 创建实验工程
2.2. 创建包
2.3. 创建包
创建邮递员实体类:
3.1. 创建奖项类:Postman。
3.2. 为Postman类创建属性,要求如下:
在这里插入图片描述
3.3. 为Postman类创建0参构造器。
3.4. 为Postman类创建2参构造器:
1) 构造器2参数分别为邮递员姓名和派送数量;
2) 在构造器内为对应的属性进行赋值:属性名等于对应参数。
创建邮局送信业务类:
4.1. 创建送信类:SendMails。
1) SendMails类需要继承线程类Thread,并且重写run方法。
4.2. 为SendMails类创建代表邮递员的属性,要求如下:
在这里插入图片描述
4.3. 为SendMails类创建0参构造器:
4.4. 为SendMails类实现发件方法,即重写接口run方法,要求如下:
本方法的业务逻辑实现要求如下:
1) 模拟邮递员送件工作;
2) 每送完一件暂停1秒,再开始下一次送件工作;
3) 送件时显示当前邮递员的代送信件数量,以及开始送第几封信件;
4) 每送完一件,更新邮递员的待送信件数量;
5) 当完成派件工作时,在控制台输出如下信息:
邮递员姓名+“已完成所有邮件派送!”。
显示同时派发信件结果:
5.1. 创建主类:MainClass;
5.2. 为MainClass创建入口主方法:main;
5.3. 在main中,创建5个不同的邮递员,并设置一定的派件量;
5.4. 在main中,创建5个驱动邮递员发件的对象,并为其配置邮递员;
5.5. 在main中,启动5个驱动邮递员发件的对象,开始模拟同时发件。