中职《计算机程序设计(Java)(第2版)》(电子工业·2019)同步教案单元九 多线程机制

资源下载
  1. 二一教育资源

中职《计算机程序设计(Java)(第2版)》(电子工业·2019)同步教案单元九 多线程机制

资源简介

课 堂 教 学 计 划 表
课程名称 Java程序设计 教师姓名 专业班级
授课时间 授课地点 学时数 8
授课题目 § 9 Java多线程机制
教学目标及要求 知识目标 多线程的概念;多线程的作用;线程的创建方式;Thread类;Runnable接口;Thread和Runnable创建线程的不同;熟悉线程类的常用方法;线程的控制;
技能目标 掌握多线程的创建方式;熟练使用Thread类;熟练使用Runnable接口;掌握Thread类中常见方法的使用;会对线程的运行状态进行控制;能使用Java的多线程机制解决实际问题;
教学重点 线程的创建和运行方式;
教学难点 线程状态的控制;利用多线程解决实际编程中的问题;
项目描述 利用本章将要学习的Java多线程技术,编程开发一个“随机摇号小工具”;
教学方法 问题导引法:通过给学生提出实际编程中出现的问题来引入教学内容,使学生在主动分析、讨论和解决问题的过程中掌握所学知识;案例分析法:通过演示典型案例来讲解相关知识和技术的具体使用过程,使学生在具体的应用环境中加深对概念的理解;任务驱动法:通过完成项目中的各个任务逐步增强实战技能;
教学过程设计 新课导入与项目展示首先通过提问、讨论等互动的形式引入课程新知识;然后通过演示本章项目来激发学生的学习兴趣,增强学生学习的积极性、主动性;项目任务分解带领学生分析本章项目并对项目进行任务分解,分解任务如下:任务1:“随机摇号小工具”的界面设计任务2:“随机摇号小工具”的功能实现 任务分析根据项目及任务的描述和要求,对项目的各个任务进行分析,然后总结出完成该任务所需要的知识、技能和主要操作步骤;相关知识点针对各个任务分析阶段得到的知识和技能,并结合本章知识和技能目标对相关知识点进行详细讲解和说明;任务实施该阶段以完成各个任务为目的,教师利用相关知识和技能以演示的方式为学生详细讲解每个任务的完整实现过程;同时,该阶段要求学生进行跟随练习,以加深对知识和技能的理解和掌握;技能拓展在保证学生掌握了各个任务所涉及的基本知识和技能的基础上,再通过介绍一定的附加知识并辅导学生完成指定的“技能拓展任务”,最终使学生对所学知识达到举一反三,融会贯通的学习目的;指导与评价对学生的任务实施过程进行指导,并对其中出现的问题进行总结,给出评价;
课后作业 完成课后相关习题;
课后分析 主要问题:线程状态的控制;
教 案 正 文
新课导入与项目展示
本章之前,编写的程序都是单线程的。即一个程序,从开始到结束会按语句顺序执行,在程序开始至结束的这一段时间内只做了一项任务。而在实际中,由于计算机中CPU的运行速度很快,仅做一项任务的话,会使CPU在大多数时间内处于闲置状态。为了充分地利用计算机中的资源,Java语言提供了多线程机制。通过多线程机制我们可以在一段时间内同时做多件事。
讨论:大家目前理解的多线程是指什么?有哪些作用?
提问:请学生列举多线程的现实例子;
运行源程序,为学生演示本章项目实现效果,主界面如下图:
项目任务分解
本章项目可以划分为以下两个主要任务:
任务1:“随机摇号小工具”的界面设计
任务2:“随机摇号小工具”的功能实现
任务1:“随机摇号小工具”的界面设计
任务分析
根据项目描述的要求,项目界面中所需基本组件的类型、数量和作用分别为:
窗体:“随机摇号小工具”程序的主显示窗口;
按钮:需要八个按钮,其中六个用于号码窗口显示数字,一个用于“开始摇号”,一个用于“停止”;
相关知识点
JFrame容器的基本应用;
JButton组件的基本应用;
任务实施
设计过程
创建窗体类Lottery,该类继承于JFrame类,并在该窗体中添加按钮控件,各个控件及说明如下表所示。
控件类型 控件名称 控件功能
JButton numButton[] 用于显示6个号码窗口的按钮组
JButton jB1 用于显示“开始摇号”的按钮
JButton jB2 用于显示“停止”的按钮
代码实现
【程序文件1:Lottery.java】
(程序代码详见教材)
技能拓展
【技能拓展任务】
对程序文件1进行修改,实现当单击“停止”按钮时,可以将用户所摇号码输出到一个“编辑框”之中。
任务2:“随机摇号小工具”的功能实现
任务分析
根据项目的功能要求,该任务需要具体实现的功能包括:
设计6个子线程分别控制6个号码窗口中数字的滚动;
通过单击“开始摇号”按钮能够实现对6个子线程的启动操作,通过单击“停止”按钮能够实现对6个子线程的终止操作。
相关知识点
进程与线程
进程是程序的一次动态且完整的执行过程,这个过程是进程本身从产生、发展到消亡的过程;
线程是比进程更小的执行单位,是进程中的一个个独立流;
多线程指同一个应用程序中有多个线程在同一段时间内共同执行;
Java中多线程的实现方法
继承Thread类
Thread类位于java.lang包中,如果一个类继承了Thread类,那么该类就成为一个线程类。另外,Thread类中有一个run()方法,一个类继承Thread之后,应该重写该方法,方法体中的内容即为该线程的主体。
【格式9-1:继承Thread类实现多线程】
class 类名extends Thread{ //继承Thread类
成员变量; //定义线程类的成员变量
成员方法; //定义线程类的成员方法
public void run(){ //重写父类Thread的run()方法
线程主体的实现;
}
}
【实例9-1:定义一个线程类】
(程序代码详见教材)
线程的启动
public void start()
该方法的作用是使当前线程开始执行,Java虚拟机会调用该线程的run()方法。
【实例9-2:线程的启动】
(程序代码详见教材)
实现Runnable接口
Runnable接口同样位于java.lang包中,该接口中只包含一个抽象方法run()。所以,如果一个类实现了Runnable接口,那么就要重写run()方法,同样方法体中的内容就是该线程的主体。
【格式9-2:实现Runnable接口实现多线程】
class 类名implements Runnable{ //实现Runnable接口
成员变量; //定义线程类的成员变量
成员方法; //定义线程类的成员方法
public void run(){ //重写接口Runnable的run()方法
线程主体的实现;
}
}
【实例9-3:实现一个线程类】
(程序代码详见教材)
Thread类的构造方法
public Thread(Runnable target)
通过Runnable接口的子类对象来创建一个新的Thread对象。
【实例9-4:线程的启动】
(程序代码详见教材)
综上所述,Java中两种实现多线程的方法虽然不一样,但是创建线程对象后,都需要使用Thread类中的start()方法来启动线程。第一种方法只应用于少数特殊情况中,如线程类及线程主体的代码非常简单时,可以考虑通过继承Thread类实现线程,其他情况一般推荐使用第二种实现线程的方法。
Thread类和Runnable接口的区别
实现Runnable接口与继承Thread类相比,有以下两点优势:
由于Java中接口可以多实现,类只能单继承,所以使用Runnable接口实现多线程可以避免单继承机制所带来的限制。
使用Runnable接口可以实现多个线程共享程序中的相关资源。
【实例9-5:使用Thread实现一个线程类模拟售票程序】
【实例9-6:使用Runnable实现一个线程类模拟售票程序】
(程序代码详见教材)
Thread类的常用方法
方法名称 方法功能
public Thread() 创建一个新的Thread对象
public Thread(String name) 创建一个新的Thread对象,并设置新线程的名称
public Thread(Runnable target) 利用Runnable接口实例创建一个新的Thread对象
public static Thread currentThread() 返回目前正在执行的线程对象的引用
public final String getName() 返回该线程的名称
public final int getPriority() 返回该线程的优先级
public Thread.State getState() 返回该线程的状态
public void interrupt() 中断该线程
public final Boolean isAlive() 测试该线程是否处于活动状态
public final void join() throws InterruptedException 等待该线程终止或消亡
public final void setName() 设置该线程的名称
public static void sleep(long millis) throws InterruptedException 让当前正在执行的线程休眠指定的毫秒数
public void start() 使该线程开始执行
public static void yield() 暂定当前正在执行的线程对象,并执行其他线程
【实例9-7:设置和获取线程的名称】
【实例9-8:线程休眠】
【实例9-9:线程暂停】
(程序代码详见教材)
任务实施
根据前面介绍的Java多线程的相关知识,“随机摇号小工具”的功能实现过程和详细代码如下:
设计过程
首先,通过继承Thread类的方法增加一个线程类NumBoardThread,实现号码窗口中数字的“滚动”效果。详见程序文件2。
其次,对程序文件1的Lottery类进行修改,实现相关按钮的单击事件处理以及与线程类的交互。详见程序文件3。
代码实现
【程序文件2:NumBoardThread.java】
【程序文件3:Lottery.java】
(程序代码详见教材)
技能拓展
【技能拓展任务】
请利用多线程的第二种实现方法,并参考上述任务2的实施过程,编写程序再次完成该项目。

展开更多......

收起↑

资源预览