JAVA教程第7章(多任务程序设计)精品PPT课件

合集下载

Java语言程序设计基础教程课件(第7章)

Java语言程序设计基础教程课件(第7章)

currentThread()方法是Thread类的类方
法,可以直接通过类名调用,该方法返回
当前正在使用CPU资源的线程。
6.Interrupt()方法
interrupt()方法常用来“吵醒”休眠的线程。但 A B 线程调用sleep方法处于休眠状态时,一个占有 阻塞状态 CPU资源的线程可以调用interrupt方法唤醒休 A.ingerrupt() Sleep() 眠中的线程自己。会导致休眠的线程发生 可运行状态 InterruptedException异常,结束休眠,重新 排队等待CPU资源,执行sleep()后的代码。
7.stop()方法 _已过时 通过调用线程的实例方法stop()来终止线 程。线程终止后,其生命周期结束了,即 进入死亡态,终止后的线程不能再被调度 执行。
8.join()方法 一个线程在占有CPU资源期间,可以让其 他线程调用join()方法和本线程联合。当 前线程等待调用该方法的线程结束后,再 重新排队等待CPU资源,以便恢复执行。 如果当前线程准备联合的线程已经结束, 也就是start方法体已经执行完,那么不 会产生任何效果。

r

q p
7.6.2 互斥锁或对象锁
为解决操作的不完整性问题,引入了对象
互斥锁,来保证共享数据操作的完整性。
每个对象都对应于一个可称为“互斥锁” Synchronized(object o){
的标记,互斥锁可以保证在任一时刻,只 需要一次执行完的语句块
} 能有一个线程访问该对象。
public void push(char c) { 同步代码 synchronized (this) { data[idx] = c; idx++; } 同步方法 } public synchronized char pop() { 注意:idx--; 1、所有存取共享数据的方法必须在同一把锁上同步 return data[idx]; 2、由同步锁保护的数据应为private的 }

Java07(第7章)

Java07(第7章)

基于线程的多任务处理的优点
基于线程所需的开销更少
– 在多任务中,各个进程需要分配它们自己独 在多任务中, 立的地址空间 – 多个线程可共享相同的地址空间并且共同分 享同一个进程
进程间调用涉及的开销比线程间通信多 线程间的切换成本比进程间切换成本低
进程与多线程的区别
Java的多线程机制 的多线程机制
示例
【例7-2】 】 创建一个实现 Runnable接口 接口 的线程类。 见 的线程类。(见 教材P205) 教材
二种线程方式的用法区别
用多线程设计一个模 拟火车站售票大厅的 工作情形
1、应用线程的子类
class Sale extends Thread { int s=100; public void run(){ System.out.println(getName() + "售机票第 + s-- +"号"); 售机票第" 售机票第 号 } }
2、线程的生命周期 、
线程要经历创 就绪、 建、就绪、运 行、阻塞和死 亡等5个状态 亡等 个状态 , 称为生命周期。 称为生命周期。

线程的使用方法
基本方法: 基本方法: 创建线程类, 创建线程类,再用其他类调用线程。 1、创建 、创建Thread子类构造线程 子类构造线程 2、实现 、实现Runnable接口构造线程 接口构造线程
class mythread implements Runnable{ public void run( ) {/* 实现该方法*/ } 实现该方法*/ }
1、创建Thread子类构造线程 、创建 子类构造线程
线程的创建与启动 (1)创建一个Thread类的子类; )创建一个 类的子类; 类的子类 (2)在子类中重新定义自己的run()方法, )在子类中重新定义自己的 方法, 方法 这个中包含了线程要实现的操作; 这个中包含了线程要实现的操作; 创建一个线程对象; (3)用关键字 )用关键字new 创建一个线程对象; 方法启动线程。 (4)调用 )调用start()方法启动线程。 方法启动线程

精品课件-Java语言程序设计案例教程(任泰明-第7章

精品课件-Java语言程序设计案例教程(任泰明-第7章

第7章 异 常 处 理
图7-1 异常类及其子类的层次结构
第7章 异 常 处 理
1) Throwable类 Throwable类主要用于描述异常发生的位置和异常的内 容,它有Error和Exception两个基本子类。Throwable类中 定义的成员方法均为公共的(public),因此所有异常类都可 以使用这些成员方法。Throwable类的常用构造方法是:
第7章 异 常 处 理
第7章 异 常 处 理
7.1 异常处理 7.2 用户自定义异常类
第7章 异 常 处 理
第7章 异 常 处 理 学习目标
掌握Java语言中异常的概念; 了解异常的处理机制; 了解Java语言中的异常类; 掌握try、catch和finally语句的用法; 学会自定义异常类。
第7章 异 常 处 理
第7章 异 常 处 理
下面是一个演示这种异常的实例:
01 class DemoException{
02 public static void main(String[ ] args){
03
int[ ] a = {2,4};
04
m1(a);
05
System.out.println("执行了m1(a) ");
at DemoException.m2(DemoException.java:11) at DemoException.m1(DemoException.java:8) at DemoException.main(DemoException.java:4)
第7章 异 常 处 理
程序的第03行定义了一个有两个元素的数组。第04行调 用了静态方法m1,调用m1方法的实参是数组a。第07行的m1方 法又调用了第10行定义的m2方法,调用m2方法的实参是数组b, m2方法的第11行输出数组中下标为2的元素值。由于该数组只 有两个元素,最大下标只能是1,因而程序执行时输出如上的 运行时异常信息。该信息表明程序中出现了一个 ArrayIndexOutOfBoundsException类的运行时异常,该异常 由m2方法的第11行引发。其方法的调用顺序是,在main方法 的第4行调用m1方法,在m1方法的第8行调用m2方法。

浙江大学Java程序设计课程PPT第七章

浙江大学Java程序设计课程PPT第七章

有趣的: 有趣的:
子类比父类具有更多的功能
类的继承(续)
Java类是一个层次结构 Java类是一个层次结构
一个超类可派生出多个子类构层次结构每个子类作为超类又可派生出多个子类 的超类, 最顶端有一个叫做Object的超类,是所有类的祖先 所有类都直接或间接地继承自Object类 如果在定义类的时候没有指出其超类, 如果在定义类的时候没有指出其超类,默认继承Object
例7-2--利用super访问父类成员
class Person2 { protected String name; protected int age; public Person2(String na, int ag) { // 构造方法 name=na; age=ag; } public void print() { System.out.println("Parent:Name="+name+" Age="+age); } Person2结束 } // 类Person2结束
Public class Teacher1 extends Person1 { // 子类派生于父类 protected String department; // 定义了成员变量 系部 public Teacher1(String na, int ag, String de) { setName(na); // 访问父类成员方法 setAge(ag); department=de; } public void print_s() { print_p(); // 访问父类成员方法 System.out.println("Department:"+department); }

《JAVA语言程序设计教程》课件第7章

《JAVA语言程序设计教程》课件第7章

1. Error与Exception类 Error类是错误类,表示仅靠程序本身无法修复的严重错 误,如内存溢出错误(OutOfMemoryError)、线程死亡错误 (ThreadDeath)等。这类异常发生时,Error类对象由Java虚拟机 生成并抛出给系统。本章不再讨论关于Error类型的异常处理, 因为它们通常是灾难性的致命错误,不是程序可以控制的。
异常类Exception的超类为Throwable类。Throwable类中 定义了方法来检索与异常相关的信息,并打印显示异常发生的 栈跟踪信息。这些方法的描述见表7.1。
表 7.1 Throwable 类定义的方法
方法
描述
Throwable fillInStackTrace( )
返回一个包含完整堆栈轨迹的 Throwable 对象,该对象可 能被再次引发
为防止和处理一个运行时错误,只需要把所要监控的代码 放进一个try语句块。紧跟try语句块的是一个能够捕获程序员 所希望的错误类型的catch语句块。下面的程序包含一个处理 例7-1中FileNotFoundException异常的try语句块和catch语句块。
【例 7-3】 捕获并处理例 7-1 中的异常。
寻找异常处理方法的过程从生成异常的方法开始,沿着方 法的调用栈逐层回朔,直到找到包含相应异常处理的方法为止。 然后,Java虚拟机把当前异常对象交给这个方法进行处理。这 一过程称为捕获(catch)异常。如果查遍整个调用栈仍然没有找 到合适的异常处理方法,Java虚拟机将终止Java程序的执行。
Java异常处理过程通过5个关键字控制:try、catch、 finally、throw和throws。其中,try、catch和finally构成异常处 理的完整语法。

Java程序设计第2版第七章.ppt

Java程序设计第2版第七章.ppt

}
double volume()
{
return area()*height; //在类内可以访问私有成员height
}
}
public class app7_2 //定义公共主类
{
public static void main(String args[ ])
{
Cylinder volu=new Cylinder();
程序运行结果如下: 您的数据有错误!! 圆柱底面积=0.0 圆柱体体积=0.0
【例7.2】续
2020/4/6
11
7.1.3 友元
若在类成员的前面加上访问控制符friendly, 说明该成员是友元。友元访问控制符可以省略。也 就是说在类内声明类成员时,不加任何访问控制修 饰符,则该成员是一个友元。一个成员被声明为友 元,表示这个成员只能被同一个包中的类所访问, 但其他包中的类不能访问该成员。
第7章 Java类的特性
通过本章的学习,主要掌握以下知识点:
类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员
2020/4/6
2
本章的重点: 方法的重载 构造方法
本章的难点: 静态成员
2020/4/6
3
7.1 类的私有成员与公共成员
在第6章的例子中,可以看到类的成员变量pi、 radius和height可以在类Cylinder的外部任意修改。 这虽然方便了程序员灵活的使用,但也存在弊端。
同理,对于类来说,如果一个类没有访问控制 符,说明它具有缺省访问控制特性。这种缺省的访 问控制权规定只能被同一个包中的类访问和引用, 而不可以被其他包中的类所使用。
2020/4/6
12
7.2 方法的重载

Java课件第七章

Java课件第七章

线
{ 线程体; }

public static void main(String s[])

{ MyThread mt1=new MyThread();


MyThread mt2=new MyThread();

mt1.start();
mt2.start();
}
}
Author:lemo
8
n
2. 实现Runnable接口
2.Java对多线程的支持 Java在语言级提供了对多线程程序设计的支持。 实现多线程程序的两种方式: (1)从Thread类继承 (2)实现Runnable接口
Author:lemo
7
n
1. 继承Thread

class MyThread extends Thread
建 { public void run()
separate Runnable run object,then that Runnable object’s run method is called; otherwise, it does nothing and returns.
join(): Wait for this thread to die.(等待线程结束)
Case study: SimpleRunnable.java
Author:lemo
10
n
public class SimpleRunnable implements Runnable{
private String message;
public static void main(String[] args){
suspend();

Java程序设计教程 第7章-Java GUI编程技术

Java程序设计教程 第7章-Java GUI编程技术
Java程序设计
7.2.1 java.awt简介
7.2 java.awt编程技术
Java程序设计
7.2 java.awt编程技术
7.2.2 Component类
❖Component类是java.awt包中最核心、最基本的类。Component类是构成Java图形用 户界面的基础,大部分组件都是由该类派生出来的。Component类是一个抽象类,其 中定义了组件所具有的一般功能,可在屏幕上显示,并可与用户进行交互,其子类如 按钮、文本框等。 ❖Component类定义的方法如下: ❖基本的绘画支持:paint(), repaint(), update()等; ❖字体和颜色等外形控制:setFont(), SetForeground()等; ❖大小和位置控制:SetSize(), SetLocation()等; ❖图像处理:实现接口ImageObserver; ❖组件状态控制(SetEnable, isEnable, isVisible, isValid等。
Java程序设计
7.2 java.awt编程技术
7.2.1 java.awt简介
❖java.awt包提供很多类和接口,包括: ❖基本组件(Component):构成GUI界面的基本元素,具有坐标位置、尺寸、字体、颜 色等属性,能获得焦点、可被操作、可响应事件等。 ❖容器类组件(Container):用来盛放组件的组件等。 ❖2D图形绘制组件(Graphics):提供在组件上绘制图形的方法。 ❖布局管理器(LayoutManager):用来安排容器中组件的位置和大小。 ❖事件处理模型:用来响应图形界面组件所触发的事件。
Java程序设计
7.1 GUI编程的Java实现
7.1.2 swing

精品课件-Java程序案例教程(田智)-第7章

精品课件-Java程序案例教程(田智)-第7章
Java的异常处理机制恰好改进了这一点,它具有易于使 用,可自行定义异常类,处理抛出异常的同时不会降低程序的 运行速度等优点。因而在Java程序设计时,应充分地利用 Java的异常处理机制,以增进程序的稳定性,提高效率。
第7章 异常处理
7.1.2 简单的异常范例 Java本身已有相当好的机制来处理异常的发生。本节主
程序说明: (1) 第7行声明一个名为arr的整型数组,并开辟了5个数 据空间。 (2) 第8行为数组中的第10个元素赋值,此时已经超出了 该数组本身的范围,所以会出现异常。发生异常之后,程序语 句转到catch语句中去处理,程序通过finally代码块统一结 束。
第7章 异常处理
(3) 第5~9行的try块用来检查是否有异常发生。若有异 常发生, 且抛出的异常属于 ArrayIndexOutOfBoundsException类,则运行第10~13行的 代码块。因为第8行所抛出的异常正是 ArrayIndexOutOfBoundsException类,所以第12行会输出 “数组超出绑定范围!”字符串。由本例可看出,通过异常机 制,即使程序运行时发生问题,只要能捕捉到异常,程序便能 顺利地运行到最后,且还能适时地加入对错误信息的提示。
at TestException7_1.main(TestException7_1.java:6)
接着结束TestException7_1的运行。 另一种处理方式是自行编写try-catch-finally 块来捕 捉异常,如TestException7_2与TestException7_3。自行编 写程序代码来捕捉异常最大的好处是:可以灵活操控程序的流 程,且可做出最适当的处理。图7-2绘出了异常处理机制的选 择流程。
02 {
03

Java程序设计课件7第七章 JDBC

Java程序设计课件7第七章 JDBC

方法名 Statement createStatement() throws SQLException PreparedStatement prepareStatement(String sql) throws SQLException CallableStatement prepareCall(String sql)
(2)数据库的操作 import java.docx 7.2.3 项目实施 (1)通过分析题目可以得出以下信息: ①在6-1项目基础上,创建表userTable,包括userID,username,userPassword三个字段; ②利用JDBC的API完成数据库的操作。 (2)编码: import java.docx (3)调试运行,显示结果
《JAVA程序设计》课程
7 .1 JDBC连接
7.1.1 项目(7-1)描述 安装和配置一种数据库,在Eclipse下完成数据库的连接测试。
7.1.1 项目知识准备 (1)JDBC概述 之前所学的案例,都是通过控制台打印输出,数据无法保存,每次运行程序都需要重新输入,在JAVA中如何实现把各 种数据存入数据库,从而长久保存。JAVA是通过JDBC技术实现对各种数据库访问的,JDBC是应用程序与各种数据库之 间进行对话的媒介。 JDBC是JAVA数据库连接(JAVA DATABASE CONNECTIVITY)技术的简称,由一组使用JAVA语言编写的类和接口组成,使 得JAVA程序能够连接各种常用的数据库。Sun公司提供了JDBC的接口规范—JDBC API,而数据库厂商或第三方中间件厂 商根据该接口规范提供针对不同数据库的具体实现—JDBC 驱动。 (2)JDBC连接数据库的API
getConnection(String url, String user, String password)

Java语言程序设计 (7)

Java语言程序设计 (7)

测试应用程序是否能从指定的文件中进行读取
boolean canWrite() boolean delbsolutePath() String getName()
String getParent()
boolean isAbsolute()
• System.in:标准输入流,默认设备是键盘。 • System.out:标准输出流,默认设畜是控制台。 • System.err:标准错误流,默认设备是控制台。
7.4 JAVA字节流的使用
• 7.4.1 字节输入流 • 7.4.2 字节输出流 • 7.4. 3 字节数组输入流 • 7.4.4 字节数组输出流 • 7.4.5 文件输入流 • 7.4.6 文件输出流 • 7.4.7 数据输入流 • 7.4.8 数据输出流
• 1.String[] list() • 该方法表示返回由File对象表示目录中所有文件和子目录名称组成的字符串数组,如果调用的File
对象不是目录,则返回null。 • 提示:list()方法返回的数组中仅包含文件名称,而不包含路径。但不保证所得数组中的相同字符
串将以特定顺序出现,特别是不保证它们按字母顺序出现。 • 2.String[] list(FilenameFilter filter) • 该方法的作用与list()方法相同,不同的是返回数组中仅包含符合filter过滤器的文件和目录,如果
void write(byte[] b)
把参数b指定的字节数组中的所有字节写到输出流中。
void write(byte[] b,int off,int len)
把参数b指定的字节数组中的若干字节写到输出流中。其 中,off指定字节数组中的起始下标,len表示元素个数。
void close()
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当前日期是由基准日期开始所经历的毫秒数转换出来的。 DateFomat类在java.text包中,Date和Calendar类在java.util包中。
案例DateDemo.java
知识学习——动态效果
❖ 动画是基于循环序列的,通过序列的不断重复,可产生动画的效果。序 列中的每一幅画面(包括图像和文本)称为一帧。通常,动画序列是每 秒显示5-25帧。
❖ 日期相关类:Date、Calendar和DateFormat
Date()方法主要用于创建日期对象并获取日期; Calendar()方法主要用于获取和设置日期; DateFormat()方法主要用于创建日期格式化器,然后再由格式化器
将日期转换为各种日期格式串输出。 JAVA语言规定的基准日期为格林尼治标准时间1970.1.1.00:00:00,
第八章 多任务程序设计
内容提要
◆线程的定义、状态 ◆线程的创建 ◆单线程和多线程
引子
❖ 假日,三五好友聚集在酒吧,一边天南地北地闲聊,一边欣赏音乐,享 受美食,其乐融融。
❖ 人在同一时间可以做许多事,如上面情景中所描述的,吃、聊、听哪个 都不耽误。为什么人可以这样呢?其实,是由于人脑通过某种方式,很 好地处理了同时来自多方面的要求,指挥身体的各个器官做相应地动作。
动手练习
在JApplet启动后,在窗体中显示一个9*9乘法表,效 果如下:
1 24 369 ………
40分钟
小结
• 进程是程序的一次动态执行过程,进程的生命周期包括产生、发展和消 亡三个阶段。 • 线程是一个比进程更小的可执行单位,与进程相同,它也有产生、发展 和消亡三个阶段。 • 一个进程中在执行过程中,可以产生一个或多个线程,但这些线程共享 同一个内存空间。 • 线程又分为单线程和多线程。一个进程中仅有一个线程称为单线程。若 一个进程中有多于一个线程时,则称为多线程。单线程应用程序在某一时 刻仅能执行一个任务,而多线程可在一个进程中同时运行,执行不同的任 务,而且能相互影响。 • Java 具有支持内置线程的特性。Java程序的主要结构是多线程。 • 在线程生命周期里,有五个状态:新建、就绪、运行、阻塞和死亡。 • 创建线程有两种方法:
知识要点
❖ 线程的概念 ❖ 线程的五种状态:新建、就绪、运行、阻塞、死亡 ❖ 两种创建线程的le接口 ❖ 单线程和多线程的实现
任务1 实现产品信息处理界面的动态显示
❖ 问题分析 ❖ 知识学习
线程概念 创建单线程 创建多线程
❖ 任务实施
执行效果
问题分析
❖ 多线程:与单线程比较而言,同一实例中有多个线程”同时”运行
知识学习——线程的五种状态
阻塞
运行
新建
就绪
死亡
知识学习——两种创建线程的方式
❖ 利用Thread创建线程
创建一个Thread的子类 重写Thread的run()方法,实现内容即为程序将实现的功能
案例SimpleThread.java TimePrinter.java
❖ 任务描述:
仓管系统中,查询产品信息的同时,在界面的状态栏显示系统日期, 在左上角显示动态欢迎信息。
❖ 步骤分析:
线程概念和线程机制 分析问题中包含几个线程,以及各个线程相关知识 日期类应用
❖ 动态效果的实现方法
编写代码及编译执行
知识学习——进程与线程
❖ 先来两个例子: 例1:利用Windows系统中的DOS命令模式执行应用程序时,首先要进入 该应用程序所在的目录,然后键入命令及应用程序的名字,按Enter执行 程序。此时,若需要执行另一个程序,必须等第一个程序退出后,才能 执行第二个程序。 例2:Windows系统中,可以在进行文字处理的同时,欣赏到美妙的音乐; 当用户运行一个精美的Flash动画时,不仅可感受到图像、音响给用户带 来的愉悦,可能还会看到一些人物对话的文字信息……
30分钟
扩展1——JApplet
❖ 例子: ❖ //java代码
import java.awt.*; import javax.swing.*; public class HelloApplet extends JApplet {
public void paint(Graphics g) { g.drawString("大家好!!",20,20); } } //html代码 <applet code=”HelloApplet.class” width=200 height=60> </applet>
❖ 计算机是否能像人一样一脑同时多用呢?回答是肯定的。当用户在计算 机上看VCD时,可以同时看到画面、听到对话和音乐。当用户处理文档 时,可以播放音乐,还可以同时运行病毒监控软件、打印文件……
❖ 计算机能做到这一点,是因为通过软件对处理文件、播放音乐、运行其 它应用程序各分配一个线程,就可以同时完成多个任务的执行。
❖ 上面的例子说明了什么?
知识学习——进程与线程
进程1 线程1 线程2
进程2 线程1 线程2 线程3
内存空间
知识学习——单线程和多线程
❖ 线程:将一个程序转换成多个独立运行的子任务。这样的每个子任务都叫 作一个“线程”(Thread)
❖ 单线程: java的一个独立程序的每一次运行称为java单进程 类或者类其中的某些方法或者代码块只能“同时”被一个线程执行。 当有多个线程同时执行到此处时,只有当正在执行的线程运行完毕, 释放锁之后,其它线程才可以继续执行。
任务实施
❖ 根据线程的概念,问题中的查询处理是一个线程,而显示系统时间和动 态欢迎信息是另一个线程。
❖ 关键问题
线程的创建 理解日期类 字体的设置 动画的处理
❖ 编码实现
案例ProductThread.java
动手练习
❖ 仓管系统中,需要在供应商查询界面的右上角 显示一个系统标志图片,并具有闪烁效果。
知识学习——两种创建线程的方式
❖ 利用Runnable接口实现
如果需要既可扩展自某个其它类,又能运行于自己的线程之中 ,则使用 Runnable接口实现
方法:先创建一个实现Runnable接口的类,并实现其中的run()方法
案例SimpleThread_2.java TimePrinter_2.java
动手练习
❖ 采用两种创建线程的方法,编写一个程序,实现在 applet上,依次显示三次“I love Java”信息, 每次间隔为2000毫秒。
❖ 问题:若仓库系统案例中,直接调用run()方法,而不 调用start()方法,产品信息处理与动态显示内容是 否还是两个线程?
40分钟
知识学习——日期
相关文档
最新文档