资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Java语言程序设计第7章 多线程与异常处理编著:张思民第7章 多线程与异常处理1、多线程的概念 2、线程的使用 3、线程同步 4、异常处理7.1 多线程的概念1、线程与多线程 2、线程的生命周期 3、线程的优先级1、线程与多线程 什么是线程 进程与多线程的区别Java的多线程机制 在Java编程中,每实例化一个线程对象, 就创建一个虚拟的CPU,由虚拟CPU处理 本线程数据。 每个Java程序都有一个主线程,即由 main()方法所对应的线程。对于applet,浏 览器即是主线程。 除主线程外,线程无法自行启动,必须通 过其他程序来启动它。2、线程的生命周期 线程要经历创 建、就绪、运 行、阻塞和死 亡等5个状态 ,称为生命周 期。7.2 线程的使用方法 1、创建Thread子类构造线程 2、实现Runnable接口构造线程 基本方法: 创建线程类,再用其他类调用线程。1、创建Thread子类构造线程 线程的创建与启动 (1)创建一个Thread类的子类; (2)在子类中重新定义自己的run()方法 ,这个中包含了线程要实现的操作; (3)用关键字new 创建一个线程对象; (4)调用start()方法启动线程。示例【例7-1】创建二个Thread 类的子类,然后 测试它。 (见教材 P205)这个例子说明了这样几个事实:(1)创建独立执行线程比较容易,Java负责处 理了大部分细节。 (2)各线程并发运行,共同争抢CPU资源, 线程抢夺到CPU资源后,就开始执行,无 法准确知道某线程能在什么时候开始执行 。 (3)线程间的执行是相互独立的。 (4)线程独立于启动它的线程(或程序)。2、 实现Runnable接口构造线程 1、实现Runnable接口2、定义run( )方法 3、构造线程:Thread(Runnable对象名); 4、启动线程:线程对象.start( );示例 【例7-2】 创建一个实现 Runnable接口 的线程类。(见 教材P205)二种线程方式的用法区别 用多线程设计一个模 拟火车站售票大厅的 工作情形 1、应用线程的子类 class Sale extends Thread int s=100; public void run() System.out.println(getName() + “售机票第“ + s- +“号“); class E3 public static void main(String args) Sale t1=new Sale(); t1.start(); 2、应用Runnale接口 class Threadsale implements Runnable int tickets=100 ; public void run() public class E9_4 public static void main(String args) Threadsale t=new Threadsale(); /实例化线 程Thread t1=new Thread (t,“第1售票窗口“);Thread t2=new Thread (t,“第2售票窗口“);Thread t3=new Thread (t,“第3售票窗口“);Thread t4=new Thread (t,“第4售票窗口“);t1.start();t2.start();t3.start();t4.start(); 线程的暂停和恢复 sleep()方法该方法指定线程休眠一段时间。如下面 语句所示: Thread thread1 = new Thread(); thread1.start(); try thread1.sleep(2000); catch(InterruptedException e) 7.4 异常处理异常(Exception)指程序运行过程中出 现的非正常现象.在Java中,把异常分为错误(Error)与 异常(Exception)两大类。异常情况(Exception)表示另外一种 “非同寻常”的错误。这种错误通常是不 可预测的。常见的异常情况包括内存不足 ,找不到所需的文件等。系统异常见P225 表7.1异常处理try可能出现异常的程序代码catch(异常类1 变量1) 异常类1对应的异常处理代码 catch(异常类2 变量2) 异常类2对应的异常处理代码 .finally 无论异常是否发生都要执行的代码 异常示例: class A public static void main(String args) int a=20,b=0; try System.out.println(a/b); catch(Exception e) System.out.println(“除数为0“); 线程中休眠的应用try 线程对象.sleep(2000); catch(InterruptedException e) 下课!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号