java程序员8.ppt
文本预览下载声明
目 标 当完成本章后,你应该能够: 了解Java的多线程机制 理解线程的生命周期及线程的状态 掌握线程的两种实现方法 掌握线程的启动、休眠、中断和终止 掌握线程的同步方法 了解线程间的交互 使用wait 和notify 进行线程之间的通信 线程入门 进程 线程或运行上下文 SellTicket 程序 案例介绍,见程序9-1 案例目的 代码分析 线程的生命周期 线程的实现方法 创建多线程有两种方法: 继承Thread类 实现Runnable接口 Thread类 每个线程都是通过类Thread在Java的软件包Java.lang中定义,它的构造方法 public Thread (ThreadGroup group,Runnable target,String name); 其中,group 指明该线程所属的线程组;target实际执行线程体的目标对象,它必须实现接口Runnable; name为线程名。Java中的每个线程都有自己的名称,Java提供了不同Thread类构造器,允许给线程指定名称。如果name为null时,则Java自动提供唯一的名称。 继承Thread类 使用继承Thread类实现多线程的基本步骤如下: 创建一个Thread类的子类A; 在子类A中重写run()方法,包含线程要实现的操作; 用关键字new 创建一个子类A的实例; 调用start()方法启动线程。 案例介绍,见程序9-2 实现Runnable接口 任何实现接口Runnable的对象都可以作为一个线程的目标对象。 通过Runnable接口实现多线程的基本步骤如下: 编写一个类B,实现Runnable接口 在类B中编写run()方法,它将成为线程的线程体 创建该类B的实例t,选择合适的构造方法 创建一个Thread类的实例M,以步骤3中的实例t为参数 实例M调用start()方法,启动线程 Runnable接口的实现 例如,类primes实现Runnable接口 Class primes implements Runnable{ Public void run(){ //代码编写 } } 类primes实现接口后,需要创建对象,例如, prime p=new prime( ); new Thread(p).start( ): 创建一个实现Runnable接口的线程类 案例介绍 在程序9-3基础上进行修改,采用实现Runnable接口的方式实现铁路售票的模拟。 程序9-3 SellTicket.java可以改用Runnable接口实现,将其代码中20行改为: class Tickets implements Runnable{ 二种线程方式的用法区别 实现Runnable接口相对于继承Thread类来说,优点如下: Thread 类是一个严格的虚拟CPU 封装,并且仅当改变或继承CPU 模型的行为时,才应该继承它。适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码,数据有效的分离,较好地体现了面向对象的设计思想。 如果采用继承Thread 类的方式创建新的线程类,则无法通过继承或间接继承获得其他类的属性和行为。 因多次被迫实现Runnable,可能为保持一致性而总采用这种方式。 继承Thread 的优点是代码会更加简洁。有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。 线程的控制 启动线程 线程调度 测试线程 线程的优先级 线程的休眠 线程的中断 线程的终止 线程的同步 线程的安全问题 案例拓展 意外原因 Synchronized关键字 对象锁标记 释放锁标记 同步函数 线程的新状态 线程交互 情景描述 解决方案:wait 以及notify 方法 池的说明 线程的最终状态 创建多线程实例 火车票窗口售票 流程图 程序9-14 生产者-消费者 生产者线程 消费者线程 SyncStack 类 pop 方法 push 方法 SyncTest 示例 总 结 Java多线程机制 线程的生命周期及线程的状态 线程的两种实现方法 继承Thread类 实现Runnable接口 线程的启动、休眠、中断和终止 线程的同步方法 * 第9章 多线程机制讲师:2009-06 -08 谢 谢 Exact File Name 5/30/08 Page * *
显示全部