文档之家
首页
教学研究
幼儿教育
高等教育
外语考试
建筑/土木
经管营销
自然科学
当前位置:
文档之家
›
第7章多线程与异常处理 张思民
第7章多线程与异常处理 张思民
格式:ppt
大小:260.50 KB
文档页数:33
下载文档原格式
下载原文件
/ 33
下载本文档
合集下载
下载提示
文本预览
1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
异常处理
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"); } } }
示例
【例7-2】 创建二个Thread 类的子类,建立 多线程,然后测 试它。
多线程
利用Thread类的子类建立多线程
static int i=0; public static void main(String[] args) { while(i<6){ i++; System.out.println( Thread.currentThread().getName() +"线程 "+i); //用Thread类的start()方法建立多线程 new SubThread_1().start(); new SubThread_2().start(); } }//主方法结束 } //主类MyTest_38结束
//利用Runnable接口创建线程 class Target implements Runnable{ String s; //存放线程名 public Target(String s) { this.s=s; System.out.println(s+"已经建立。"); }//构造方法结束 public void run() { //接口中的虚方法 System.out.println(s+"已经运行。"); try{//捕获时钟中断异常 Thread.sleep(3000); //等待3秒 }catch(InterruptedException e){} System.out.println(s+"已经结束。"); } //run方法结束 } //内部类Target结束
7.4
异常处理
下面列出了主要的运行时异常: • ArithmeticException:一个不寻常算术运算产生的异常。 • ArrayStoreException:存入数组的内容数据类型不一致所产生的异 常。 • ArrayIndexOutOfBoundsException:数组索引超出范围所产生的异 常。 • ClassCastExcption:类对象强迫转换造成不当类对象所产生的异常。 • IllegaArgumentException:程序调用时,返回错误自变量的数据类 型。 • IllegaThreadStateException:线程在不合理状态下运行所产生的异 常。 • NumberFormatException:字符串转换数值所产生的异常。 • IllegaMonitorStateException:线程等候或通知对象时所产生的异常。 • IndexOutOfBoundsException:索引超出范围所产生的异常。 • NegativeException:数组建立负值索引所产生的异常。 • NullPointerException:对象引用参考值为null所产生的异常。 • SecurityException:违反安全所产生的异常。
2、线程的生命周期
• 线程要经历创 建、就绪、运 行、阻塞和死 亡等5个状态 , 称为生命周期。
7.2
线程的使用方法
基本方法: 创建线程类,再用其他类调用线程。 • 1、创建Thread子类构造线程 • 2、实现Runnable接口构造线程
1、创建Thread子类构造线程
• 线程的创建与启动 (1)创建一个Thread类的子类; (2)在子类中重新定义自己的run()方法, 这个中包含了线程要实现的操作; (3)用关键字new 创建一个线程对象; (4)调用start()方法启动线程。
7.3 线程的同步
• 线程(Thread)是一份独立运行的程序,有自 己专用的运行栈。线程有可能和其他线程共享一 些资源,比如,内存,文件,数据库等。 当多个线程同时读写同一份共享资源的时候,可 能会引起冲突。这时候,我们需要引入线程“同 步”机制 。 • 线程同步就是线程排队。同步就是排队。线程同 步的目的就是避免线程“同步”执行。 • 只有共享资源的读写访问才需要同步。如果不是 共享资源,那么就根本没有同步的必要。 • 只有“变量”才需要同步访问。如果共享的资源 是固定不变的,那么就相当于“常量”,线程同 时读取常量也不需要同步。
二种线程方式的用法区别
• 用多线程设计一个模 拟火车站售票大厅的 工作情形
1、应用线程的子类
• class Sale extends Thread • { • int s=100; • public void run(){ • System.out.println(getName() + "售机票第" + s-- +"号"); • } • }
线程中休眠的应用
try{ 线程对象.sleep(2000); }catch(InterruptedException e){ }
异常处理举例(1)
//键盘接受一个int整数:异常处理 import java.io.*; public class test { public static void main(String args[]) { int i; int n=0; /* 键盘接受一个int整数n */ try { //异常捕获 BufferedReader br= //建立一个键盘缓冲区 new BufferedReader(new InputStreamReader(System.in)); //从键盘缓冲区得到整数 n=Integer.parseInt(br.readLine()); } catch(IOException e){ }; System.out.println(n);
线程的暂停和恢复
• sleep()方法 该方法指定线程休眠一段时间。如下面 语句所示: Thread thread1 = new Thread(); thread1.start(); try { thread1.sleep(2000); } catch(InterruptedException e) { }
7.3 线程的同步
• 【例7-4】 • 模拟多窗口售票, 利用 “synchronized同 步代码块方法” 实 现线程同步
利用“synchronized同步代码块方法” 实现线程同步
//Synchronized同步代码块方法 class ThreadTest implements Runnable { private int tickets=10; //有这么多票 public void run() { while(true) { synchronized(this) { if(tickets>0) { try{ //等待1秒,再执行下面的输出语句 Thread.sleep(1000); }catch(Exception e){ //捕获异常 System.out.println(e.getMessage()); } System.out.println( Thread.currentThread().getName()+ "正在卖第"+tickets--+"号票");
2、 实现Runnable接口构造线程
• 1、实现Runnable接口 2、定义run( )方法 • 3、构造线程:Thread(Runnable对象名); • 4、启动线程:线程对象.start( );
示例
• 【例7-3】 • 创建一个实现 Runnable接口 的线程类。
利用runnable接口建立多线程
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(); } }
7.3 线程的同步
• 在Java中实现线程同步的途径有两条。一条是采用 “synchronized同步方法”,另一条是采用 “synchronized同步代码块方法”。 • “synchronized同步方法”是通过synchronized关键 字将一个完整的方法声明为同步方法。 • “synchronized同步代码块方法” 是通过 synchronized关键字将一个程序块声明为同步代码 块,而不是将一个完整的方法声明为同步方法。 synchronized(syncObject) { 需要同步(排队)执行的代码 }
Leabharlann Baidu
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() • {....} • }
7.4 异常处理
异常(Exception)指程序运行过程中出 现的非正常现象. 在Java中,把异常分为错误(Error)与 异常(Exception)两大类。 异常情况(Exception)表示另外一种 “非同寻常”的错误。这种错误通常是不 可预测的。常见的异常情况包括内存不足, 找不到所需的文件等。
Java语言程序设计
第7章 多线程与异常处理
第7章
多线程与异常处理
1、多线程的概念 2、线程的使用 3、线程同步 4、异常处理
7.1 多线程的概念
1、线程与多线程 2、线程的生命周期 3、线程的优先级
1、线程与多线程
• 什么是线程
• 进程与多线程的区别
Java的多线程机制
• 在Java编程中,每实例化一个线程对象, 就创建一个虚拟的CPU,由虚拟CPU处理 本线程数据。 • 每个Java程序都有一个主线程,即由 main()方法所对应的线程。对于applet,浏 览器即是主线程。 • 除主线程外,线程无法自行启动,必须通 过其他程序来启动它。
这个例子说明了这样几个事实:
(1)创建独立执行线程比较容易,Java负责处 理了大部分细节。 • (2)各线程并发运行,共同争抢CPU资源, 线程抢夺到CPU资源后,就开始执行,无 法准确知道某线程能在什么时候开始执行。 • (3)线程间的执行是相互独立的。 • (4)线程独立于启动它的线程(或程序)。
示例
【例7-1】 创建二个Thread 类的子类,建立 单线程,然后测 试它。
单线程
利用Thread类的子类建立单线程
//继承Thread类创建线程 class SubThread_1 extends Thread{ public void run(){ //线程体方法 System.out.println( Thread.currentThread().getName() +" 子类一的线程。"); } }//内部类SubThread_1结束 class SubThread_2 extends Thread{ public void run(){ //线程体方法 System.out.println( Thread.currentThread().getName() +" 子类二的线程。"); } }//内部类SubThread_2结束
相关主题
第七章异常处理
文档推荐
第七章 多线程与异常处理
页数:74
第7章 异常处理和断言
页数:2
第7章 ARM异常中断处理及编程
页数:16
第7章 VB NET异常处理
页数:5
异常(Exception)处理
页数:25
第7章 调试、测试和异常处理PPT教学课件
页数:13
第七章 发酵异常情况分析处理与防治
页数:40
第七章不良地质现象
页数:50
第7章Java异常处理
页数:22
第七章 异常(Exception)处理
页数:24
最新文档
上海自贸区的政策汇总金融方面
语文s版三上 山雀 课件
风电专业技术工作总结怎么写
~机械优化设计复习题及答案
学校公开课教案设1
如何获取数学课堂的最佳效果
高等数学名词(中英文)
预防接种门诊考核验收标准(DOC 32页)
人教版小学二年级数学下册除法竖式大全 (189)
建筑施工中的质量管理及成本控制