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

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

题目要求

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

  1. 业务说明:
    1.1. 本实验以实际生活中邮局派发邮件为业务背景。
    1.2. 通常邮局每天都会有大量的邮件需要邮递员派发。
    1.3. 根据邮件的性质以及发往地点的不同,安排不同人送件。
    1.4. 为了快速处理好每日的发件工作,邮局需要安排多人同时发件。
    1.5. 每个发件人每日定量发件,并将邮件逐一派发给不同收件人。
    1.6. 本业务关键概念:邮递员、派件数量以及同时发件。
  2. 创建工程并配置环境:
    2.1. 创建实验工程
    2.2. 创建包
    2.3. 创建包
  3. 创建邮递员实体类:
    3.1. 创建奖项类:Postman。
    3.2. 为Postman类创建属性,要求如下:
    在这里插入图片描述
    3.3. 为Postman类创建0参构造器。
    3.4. 为Postman类创建2参构造器:
    1) 构造器2参数分别为邮递员姓名和派送数量;
    2) 在构造器内为对应的属性进行赋值:属性名等于对应参数。
  4. 创建邮局送信业务类:
    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. 显示同时派发信件结果:
    5.1. 创建主类:MainClass;
    5.2. 为MainClass创建入口主方法:main;
    5.3. 在main中,创建5个不同的邮递员,并设置一定的派件量;
    5.4. 在main中,创建5个驱动邮递员发件的对象,并为其配置邮递员;
    5.5. 在main中,启动5个驱动邮递员发件的对象,开始模拟同时发件。

Postman

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

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

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();
		}
	}
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读