《第9章+Java的多线程机制与IO操作.ppt》由会员分享,可在线阅读,更多相关《第9章+Java的多线程机制与IO操作.ppt(18页珍藏版)》请在人人文库网上搜索。

1、第9章Java的多线程机制与I/O操作,湖南科技大学计算机科学与技术系,2,主要内容,Java多线程机制 Java图形界面编程 Java文件操作,湖南科技大学计算机科学与技术系,3,9.1 多线程机制的含义,线程是一个程序中的一个执行流,多线程是指一个程序中包含有多个执行流。 线程和进程一样,都是实现并发操作的基本单位,线程和进程的差别主要体现在: 同为基本的执行单位,线程的划分比进程小; 进程占有独立的内存资源,而线程具有共享的“堆”独立的“栈”,线程可以利用“堆”来完成线程间的通信。 Web编程(如下载,HTTP服务等)要求具有多线程机制。,湖南科技大学计算机科学与技术系,4,9.2 多线。

2、程机制的实现,Java提供了两种线程编程机制 继承Thread类方法常用于Java应用程序中 示例:CounterApplication.java 实现接口Runnable常用于Java applet程序中 示例:CounterApplet.java CounterApplet.html 运行:appletviewer CounterApplet.html 示例: MultiThread.java,湖南科技大学计算机科学与技术系,5,9.2 多线程机制的实现,线程竞争与同步 多个线程可能会存取同一实例变量,造成线程竞争。 解决办法是采取同步机制 通过synchronized实现资源同步 代码段。

3、同步 格式如下: synchronized(someObject) /代码 方法同步 示例: CounterApplet1.java CounterApplet1.html,湖南科技大学计算机科学与技术系,6,9.3 Thread类,构造函数 public Thread() 常量 MAX_PRIORITY MIN_PRIORITY NORM_PRORITY 优先级110 方法 public final void setName(String name) public final void String getName( ) public static int activeCount( ) pu。

4、blic native synchronized void start( ) public final void suspend( ),湖南科技大学计算机科学与技术系,7,9.4 线程的生命同期,线程生命周期中的状态转换图,湖南科技大学计算机科学与技术系,8,9.4 线程的生命同期,堵塞(blocked) sleep( )方法 suspend( )与resume( )方法 示例:ThreadTest2.java ThreadTest3.java wait( )与notify( )方法 示例:ThreadTest5.java ThreadTest4.java I/O堵塞 示例:MyClass1.。

5、java,湖南科技大学计算机科学与技术系,9,9.5 创建用户界面,AWT(Abstract Window Toolkit) 是API为Java 程序提供的建立GUI工具集 AWT可用于Java的applet和applications中。 AWT支持图形用户界面编程的功能包括: 用户界面组件; 事件处理模型; 图形和图像工具; 布局管理器; 数据传送类。,湖南科技大学计算机科学与技术系,10,9.5 创建用户界面,java.awt包提供了的GUI设计工具。主要包括: 组件Component 组件是以图形化的方式显示在屏幕上并能与用户进行交互的对象,如按钮、标签等。组件不能独立地显示,必须放在一。

6、定的容器中才可以显示出来。 类java.awt.Component是许多组件类的父类,Component类中封装了组件通用的方法和属性,如组件对象、大小、显示位置、前景色和背景色、边界、可见性等 容器Container 容器(Container)也是一个类,是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。 常用的有Panel, Frame, Applet。 布局管理器LayoutManager 每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。 布局管理器主要包括:FlowLa。

7、yout, BorderLayout,GridLayout, CardLayout, GridBagLayout,湖南科技大学计算机科学与技术系,11,9.5 创建用户界面,注意 1Frame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。 2Panel无法单独显示,必须添加到某个容器中。 Panel的缺省布局管理器为FlowLayout。 3当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某个区域显示多个组件,达到设计复杂用户界面的目的 。 4如果采用无布局管理器setLayou。

8、t(null),则必须使用setLocation(), setSize(), setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不鼓励使用。 示例: MyFrame.java,湖南科技大学计算机科学与技术系,12,9.5 创建用户界面,AWT事件处理模型 要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。 在事件处理的过程中,主要涉及三类对象: Event事件,用户对界面操作的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。 Event Source事件源,事件发生的场所,通常就是各个组件,例如按钮Button。 Event hand。

9、ler事件处理者,接收事件对象并对其进行处理的对象。,湖南科技大学计算机科学与技术系,13,9.5 创建用户界面,AWT事件处理模型 Java采取了授权处理机制 事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理 事件处理者(监听器)通常是一个类,该类如果要能够处理某种类型的事件,就必须实现与该事件类型相对的接口。 将事件源对象和事件处理器分开 使用授权处理模型进行事件处理的一般方法 1对于某种类型的事件XXXEvent,,要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListener; 2事件源实例化以后,必须进行授权,注册该类。

10、事件的监听器,使用addXXXListener(XXXListener ) 方法来注册监听器。 示例:MyEventHandle.java,湖南科技大学计算机科学与技术系,14,9.5 创建用户界面,AWT采用了与特定平台相关的实现,图形用户接口欠佳 Java基础类( JFC )Swing是第二代GUI开发工具集,与AWT的重量级组件不同,Swing中大部分是轻量级组件 Swing是构筑在AWT上层的一组GUI组件的集合,为了保证可移植性,它完全用Java语言编写 Swing提供了更完整的组件,引入了许多新的特性和能力 Swing提供了更多的组件库,如: JTable , JTree , Jc。

11、ombox Swing增强了AWT中组件的功能 JComponent类是Swing组件的基类,而JComponent继承自 Container类,因此,所有的Swing组件都是AWT的容器 Swing采用了MVC设计模式 示例:SwingUI.java,湖南科技大学计算机科学与技术系,15,9.6 应用程序对文件的访问,JAVA的输入输出是以流(Stream)来方式来处理的 流是在计算机输入、输出操作中流动的数据序列 java.io包中包括许多类提供许多有关文件的各个方面操作,其中File类主要用于文件操作 利用构造函数File(string path, string filename) 等创。

12、建出File 对象; 利用canRead() 、canWrite()、 getParent()、 getPath()、 isDirectory()等成员函数实现对文件的各个属性的操作。 在文件读写的编程过程中主要应该注意异常处理 示例:FileTest.java,湖南科技大学计算机科学与技术系,16,9.6 应用程序对文件的访问,输入输出抽象基类InputStream/OutputStream 实现文件内容操作的基本功能函数read()、 write()、close()、skip()等 一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读写 FileInputStream/FileOu。

13、tputStream 用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象); 本地文件读写编程的基本过程为: 生成文件流对象(对文件读操作时应该为FileInputStream类,而文件写应该为FileOutputStream类); 调用FileInputStream或FileOutputStream类中的功能函数如read()、write(int b)等)读写文件内容; 关闭文件(close())。 示例:FileIO.java,湖南科技大学计算机科学与技术系,17,小结,Java多线程机制 Java图形界面设计 Java输入/输出操作,湖南科技大学计算机科学与技术系,18,课后练习,比较线程与进程的异同? Java的两种线程编程机制是怎样实现的? 画出线程状态转换图。 编程 利用线程同时显示三个时钟。 建立文件,并写入一首唐诗,然后显示文件内容。要求用图形用户界面输入与输出。