Chapter7_多线程与异常处理37页PPT

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 每个Java程序都有一个主线程,即由main()方法 所对应的线程。对于applet,浏览器即是主线程。
• 除主线程外,线程无法自行启动,必须通过其他 程序来启动它。
2、线程的生命周期
• 线程要经历创建、 就绪、运行、阻 塞和死亡等5个 状态 ,称为生 命周期。
创建状态
• 通过new命令创建一个线程对象,创建后的线 程就处于创建状态。
– Thread thread1=new Thread();
就绪状态
• 处于创建状态的线程对象通过调用start()方法 就进入了就绪状态。
– Thread thread1=new Thread(); thread1.start();
• 进入就绪状态的线程对象被放到一个等待队列 中,等待系统为其分配对处理器的控制权。
Chapter7_多线程与异常处理
1、战鼓一响,法律无声。——英国 2、任何法律的根本;不,不成文法本 身就是 讲道理 ……法 律,也 ----即 明示道 理。— —爱·科 克
3、法律是最保险的头盔。——爱·科 克 4、一个国家如果纲纪不正,其国风一 定颓败 。—— 塞内加 5、法律不能使人人平等,但是在法律 面前人 人是平 等的。 ——波 洛克
• (2)各线程并发运行,共同争抢CPU资源,线程 抢夺到CPU资源后,就开始执行,无法准确知 道某线程能在什么时候开始执行。
• (3)线程间的执行是相互独立的。 • (4)线程独立于启动它的线程(或程序)。
• 线程的暂停与恢复 – public static void sleep(long millis) : 线程休眠millis毫秒。
• 所有实现了Runnable接口的类的对象都可以以 线程方式执行。Leabharlann • 1、实现Runnable接口
• 2、定义run( )方法 public class TreadCounting implements Runnable { …… public void run() { //在此处添加run()方法代码 } }
• 什么是线程 在多线程的操作系统中,一个进程中包含多个线程。 线程是独立运行的基本单位。 进程作为资源分配的基本单位。同一进程的多个线程 共享该进程所拥有的资源。
• 进程与多线程的区别
Java的多线程机制
• 在Java编程中,每实例化一个线程对象,就创建 一个虚拟的CPU,由虚拟CPU处理本线程数据。
– yield():暂停当前正在执行的线程对象,并执行其他线程。 – wait():使线程进入等待状态直到被另一进程唤醒。 – notify():把线程的变化通知并唤醒等待的某个线程。
2、 实现Runnable接口构造线程
• Runnable接口:
– 位于ng包中,定义如下: package ng; public interface Runnable { public abstract void run(); }
– sleep(),wait()方法
• 当I/O完成,获得缓冲空间后,线程就由阻塞状 态转变为就绪状态。
死亡状态
• 线程执行完毕或被另一线程强行终止执行,线 程退出运行状态,并不再进入就绪队列。
– run()方法执行结束,线程会被撤销。 – 执行System.exit()方法强行退出,导致进程强行
Java语言程序设计
清华大学出版社
第7章 多线程与异常处理
第7章 多线程与异常处理
1、多线程的概念 2、线程的使用 3、线程同步 4、异常处理
7.1 多线程的概念
1、线程与多线程 2、线程的生命周期 3、线程的优先级
1、线程与多线程
• 什么是进程 进程是程序的一次执行 进程是程序在一个数据集合上运行的过程。进程是系 统资源分配和调度的独立单位。
运行状态
• 线程处于运行状态,该进程对应的代码目前正 在运行。除非运行过程中对处理器的控制权被 一个优先级更高的线程抢占,否则该线程将一 直运行完毕然后释放对处理器的控制权。
– run()
阻塞状态
• 正在运行的线程由于发生某事件而暂时无法继 续执行时,便放弃处理器处于暂停状态。这种 暂停状态称为阻塞状态。常见的导致线程阻塞 的典型事件为:I/O请求,申请缓冲空间等。
– public static void sleep(long millis, int nanos) 线程休眠millis毫秒及nanos纳秒。 Thread thread1 = new Thread(); thread1.start(); try { thread1.sleep(200,100); } catch(InterruptedException e) { }
7.2 线程的使用方法
基本方法: 创建线程类子类,再用其他类调用 线程。
• 1、创建Thread子类构造线程 • 2、实现Runnable接口构造线程
1、创建Thread子类构造线程
• 线程的创建与启动
– (1)创建一个Thread类的子类; Thread类位于ng包中
– (2)在子类中父类中的run()方法,run()方法 中包含了线程要实现的操作;
• 3、构造线程: Thread(Runnable 对象名); Thread(Runnable 对象名,String 线程名);
– (3)用关键字new 创建一个线程对象; – (4)调用start()方法启动线程。线程启动后当
执行完run()方法后,线程会进入死亡状态。
示例
【例7-1】 创建二个Thread类 的子类,然后测试它。
这个例子说明了这样几个事实:
• (1)创建独立执行线程比较容易,Java负责处理 了大部分细节。
终止
3、线程的优先级
• Java提供一个线程调度器来监控进入就绪状态的所有 线程。
• 线程调度器根据线程的优先级决定调度哪个线程执行。 • 线程的执行方式:
– 时间片方式 – 非时间片方式(独占式)
• 在Java中,线程优先级的范围为1~10,即 Thread.MIN_PRIORITY到Thread.MAX_PRIORITY。默 认优先级为5,即Thread.NORM_PRIORITY。 getPriority()方法可以获得线程的优先级 setPriority()方法可以设置线程的优先级
相关文档
最新文档