湖南科技职业学院软件职业技术学院 教师课时授课计划 教师姓名: 授课班级: 授课课时:9 课程名称:JAVA程序设计 第 11 课 教学循环号:7-2 课题 实现线程通信  各教学环节课时分配 讲授  4 课时   有指导的实践  2 课时   独立实践  3 课时  教学内容 1、使用Vector类存储对象2、实现thread 通信  重点 理解如何实现thread 通信  难点 实现thread 通信  教具 多媒体  作业 独立实践  授课日期 (校历) 第 5 周星期 3 第 2 节   第 5 周星期 4 第 1-4 节   第 5 周星期 5 第 5-8 节   第 周星期 第 节  课后小结 用synchronized 关键字来保证没有二个线程会同时地访问同一个对象线程间通信使用wait(), notify(), 及 notifyAll()方法收集是其内包含一组对象的对象Vector 类是一种可包含多个对象的动态收集 Stack 类是Vector 类的子类,实现栈数据结构  详细教学过程附后 详细教学过程: 一、教学目标陈述(5分钟) 使用Vector类存储对象 实现thread 通信 二、了解收集的概念(45*2分钟) 1、收集 收集是其内包含一组对象的对象,所包含的对象称为收集的元素 收集的元素一般是从公共父类型传下来的 Java 编程语言 支持如Vector, Bits, Stack, Hashtable, 及LinkedList之类的收集类。收集有对类型Object的对象的引用 收集 API 一般由用来维护对象的接口组成。这些是 Collection, Set, 及 List 接口 2、Vector 类 Vector 类允许你创建可包含多个对象的动态的数组 它提供加入、抹去、及插入元素的方法 当你创建一个vector时,你必须指出它的初始大小,及它应增长多快 三个构造符是: public Vector():创建空的向量 public Vector(int initCap):创建由initCap 指出初始容量的向量 public Vector(int initCap, int increment):创建由initCap 指出的元素空间的向量并通过增量元素增加容量 加入对象到Vectors: addElement(Object n):可作为vector中最后的元素它加入新对象 n, insertElementAt(Object n, int index):它在下标所指的位置插入一个新的对象n setElementAt(Object n, int index):它用对象n 在下标处替换此元素 在Vectors 中抹去对象: 你可用void removeElementAt(int index) 在vector 中抹去对象 访问Vector 的元素: 为了访问向量的元素,你可用elementAt()方法 为找出出现在vector中对象的个数,你可用size()方法 3、Stack 类 Stack 类是Vector类的子类. 你可用push()方法下推对象到栈。方法 pop()检索栈顶上对象 你可用search()方法搜索栈中对象。如果栈为空 empty() 方法返回true 4、监视器状态 监视器是一个对象,可以挂起线程的执行直到满足特定的条件为止 当线程等待要满足的条件时,它将进入找锁状态 三、实例分析(45*2分钟) 11.D.1 1、问题的陈述 CellGO的高级管理已决定开发一个谈话实用程序,帮助它的跨世界的客户服务。CellGO的客户服务中心的专家使用此谈话实用程序帮助客户联机。在CellGO有一个谈话服务器。当用户登录到谈话服务器时,用户能够看到所有的联机专家。用户可用谈话接口发送查询到专家,专家将用同一应用的另一个实例回答。 创建服务器程序。 2、确定任务 识别存储消息的收集 识别收集变量的名 识别通信机制 编码存储和检索消息的方法 保存、编译、及执行代码 验证服务器程序是否在工作 3、分析解决问题 识别存储消息的收集 结果: 使用 Vector类 ,因为不知道要收到消息的数目 识别收集变量的名 结果: vectorMessage 识别通信机制 线程之间的通信: 线程之间的通信称为线程间通信 线程之间的通信使用四种方法达到: wait(), notify(), notifyAll(), 及 yield() 它们只能从synchronized 方法被调用 当访问必须与对象协调时,使用 synchronized方法 你可在任何时刻仅调用关于对象的一个synchronized 方法。这避免了多线 程中被同步方法之间的冲突 wait() 方法: wait()方法告诉当前的线程放弃监视器并睡眠直到另一个线程调用 notify() 方法为止 语法: public final void wait() throws InterruptedException; notify() 方法: notify() 方法唤醒正在等待对象的当前监视器的单个线程 如果有多个线程在等待,任意选择其中之一 线程以下面三种方式之一变成对象监视器的拥有者: 通过执行该对象的已同步的实例方法 通过执行同步此对象的synchronized 语句的体 通过执行类的同步化静态方法 yield() 方法: yield() 方法引起运行系统把当前的线程进入睡眠,并执行队列中下一个线程 例子: 这个例子中,方法put()接收用户的消息并存储它们到向量 另一个方法 get()接收向量的消息并在屏幕上显示它们 get()方法应等到向量中有新消息出现为止 put()方法应在它存储新消息到向量时通知get() 方法 结果: 为能进行通信,与读和写到收集对象的方法一起使用synchronized 关键字。然后,为线程通信使用wait()和 notifyAll()方法 4、执行验证 编码存储和检索消息的方法 保存、编译、及执行代码 验证服务器程序是否在工作 动作: 执行此服务器并使命令提示窗口最小化。在另一个命令提示窗口中启动客户应用并打入要传递给服务器的信息。 四、指导性练习(45*2分钟) 11.P.1 1、问题陈述 需要用谈话实用程序来解决商人联机的查询问题。商人应看到销售联机执行的列表。为此,需要服务器有以下规格说明: 应仅对有正确注册的有效用户提供服务. 商人应接收有特定商人标记的消息. 提供所有商人的查询和解决方案应存储以便以后引用 2、问题分析 3、验证 五、小结 (10分钟) 六.独立实践(45*3分钟) 布置学生进行独立实践11.MR.1 考虑项目设计 根据完成情况进行少量讲解