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() {}@Overridepublic 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个驱动邮递员发件的对象,开始模拟同时发件。

JAVA入门_多线程_邮局派发信件相关推荐

  1. 5_异常_多线程_设计模式_IO流_网络编程_反射

    JavaSE_第五周 异常 异常的概念 什么是异常 概念 概念:程序在运行过程中出现的特殊情况异常-----通过Jvm将异常的信息打印在控制台---告诉开发者(当前程序在某个环节出现了哪些问题!) 异 ...

  2. java 并发编程多线程_多线程(一)java并发编程基础知识

    线程的应用 如何应用多线程 在 Java 中,有多种方式来实现多线程.继承 Thread 类.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现带 ...

  3. java 小程序 多线程_《多线程练习—买票小程序——Java第十四周》

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:    < ...

  4. java图形界面多线程_多线程编程、Java I/O系统和Java图形界面编程

    多线程编程: 一个正在运行的程序通常称为一个进程,每一个任务称为一个线程,中能够在一个程序内运行多线程的程序称为多线程程序. 线程与进程的区别:①每个进程都需要操作系统为其分配独立的内存空间: ②而同 ...

  5. java 怎么启动多线程_了解Java多线程及如何创建和启动多线程?

    1 . 进程与线程 至今为止,我们开发的程序在同一时间只能执行一项任务,如果程序执行中遇到了耗时的任务,程序必须等待该任务完成后才能执行后续的代码.这样的单线程结构不能充分利用计算机的硬件资源,代码运 ...

  6. Java学习笔记18:Java_Map集合_HashMap集合_可变参数_Stream流_多线程_线程同步_生产者消费者

    文章目录 1.Map集合 1.1Map集合概述和特点[理解] 1.2Map集合的基本功能[应用] 1.3Map集合的获取功能[应用] 1.4Map集合的遍历(方式1)[应用] 1.5Map集合的遍历( ...

  7. java 单线程改多线程_帮我把单线程的程序改成多线程JAVA,急!

    /*SocketServer.java*/importjava.awt.*;importjava.awt.event.*;publicclassSocketServerextendsFrameimpl ...

  8. java 消费者模式 多线程_[Java并发-24-并发设计模式] 生产者-消费者模式,并发提高效率...

    生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...

  9. 11_张孝祥_多线程_线程锁技术

    转载 Java并发编程:Lock locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---AbstractOwnableSynchroniz ...

最新文章

  1. 为什么医学影像AI已进入「后深度学习时代」?
  2. 《陶哲轩实分析》引理17.2.4证明_导数的唯一性
  3. MYsql 安装后启动服务1067错误
  4. Ubuntu安装qwt步骤
  5. FCC 中级算法题 Where art thou
  6. zabbix server的图像展示接口
  7. python集合类型应用场景_python学习笔记(10)--组合数据类型(集合类型)
  8. 【实习之T100开发】Linux 学习笔记
  9. first network error, wait for 15 seconds
  10. 数据交互什么意思_学习编程怎么样才可以不枯燥?什么是前端语言?
  11. php怎么写脚本,PHP脚本来写Daemon程序_php
  12. 5个强大的Java分布式缓存框架_5个Java分布式缓存框架
  13. python分析股票收益与投资者情绪的关系_投资者情绪与股市收益关系实证研究
  14. 大禹电子:元宵佳节逛花灯,猜灯谜好不热闹
  15. ES数据库重建索引——Reindex(数据迁移)
  16. 『Linux』CentOS 7下一些有趣的配置
  17. Java面试之场景题汇总
  18. mysql 五舍六入_四舍六入五成双(适用于MYSQL)(最大支持小数点第9位)
  19. 百分制成绩转换为五分制成绩
  20. Android 6.0(棉花糖)新特性

热门文章

  1. 如何做深ViT模型?NUS、字节:引入Re-attention机制,实现强大性能
  2. 如何应用AutoML加速图机器学习任务的处理?
  3. 面向睡眠阶段分类的自适应时空图卷积神经网络
  4. C++一学就废?试试这个项目包
  5. 从ICLR 2020、AAAI 2020看对话系统近期研究进展
  6. “Paper + Code”才是研读论文的正确姿势 | PaperDaily #02
  7. web 小程序 ch2 第一个小程序
  8. hdu 2046 骨牌铺方格 递推求解
  9. jieba.posseg.cut方法
  10. 怎么查看自己安装的python版本_教你如何检查 Python 版本