Java程序设计简明教程 p10

上传人:E**** 文档编号:89396219 上传时间:2019-05-24 格式:PPT 页数:21 大小:102KB
返回 下载 相关 举报
Java程序设计简明教程 p10_第1页
第1页 / 共21页
Java程序设计简明教程 p10_第2页
第2页 / 共21页
Java程序设计简明教程 p10_第3页
第3页 / 共21页
Java程序设计简明教程 p10_第4页
第4页 / 共21页
Java程序设计简明教程 p10_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《Java程序设计简明教程 p10》由会员分享,可在线阅读,更多相关《Java程序设计简明教程 p10(21页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计,教材:Java程序设计简明教程 中国水利水电出版社,2019年5月24日星期五2时24分32秒,Java 程序设计,2,第10章 流、多线程与网络编程 Java输入/输出信息时,应在程序和信息发送者或接收者之间建立一个数据通道,这个数据通道以流(Stream)的形式表示;Java语言具有多线程的特点,对多线程的支持使得Java的功能更加强大;而面向Internet的网络编程将是Java今后的主要研究方向。,2019年5月24日星期五2时24分32秒,Java 程序设计,3,10.1 流 10.1.1 Java流的基本概念 为了解决由于数据源和数据宿的多样性而带来的输入/输出操

2、作的复杂性与程序员所希望的输入/输出操作的相对统一和简单之间的矛盾,Java引入了“流”以及有关的“流类”。 流可以被理解为一条“管道”,可以看作流动的数据缓冲区。这条“管道”有两个端口,一端与数据源(当输入数据时)或数据宿(当输出数据时)相连,另一端与程序相连。,2019年5月24日星期五2时24分32秒,Java 程序设计,4,有了流,程序和外界的数据交换,都可以通过流实现。当程序从数据获得数据时,必须在程序和数据源之间建立输入流;当程序要把数据输送到数据宿时,必须在程序和数据宿之间进行连接并建立输出流。无论涉及输入/输出的数据源和数据宿是什么,只要在程序和数据源/数据宿之间建立了流,用户

3、就不需要再关心数据来自何方或送往何处,程序中输入/输出操作的复杂性就大大降低了。所有输入/输出操作都转换为对流的操作。,2019年5月24日星期五2时24分32秒,Java 程序设计,5,10.1.2 数据流的应用 /*ch1001.java*/ import java.io.*; public class ch1001 public static void main(String args) throws IOException FileInputStream in =new FileInputStream(“ch1001.java“); FileOutputStream out=new F

4、ileOutputStream(“ch1001.txt“); int c; while(c=in.read()!=-1) out.write(c); in.close(); out.close(); ,2019年5月24日星期五2时24分32秒,Java 程序设计,6,/*ch1002.java*/ import java.io.*; public class ch1002 public static void main(String args) throws IOException FileReader in=new FileReader(“ch1002.java“); FileWriter

5、 out=new FileWriter(“ch1002.txt“); int c; while(c=in.read()!=-1) out.write(c); in.close(); out.close(); ,2019年5月24日星期五2时24分32秒,Java 程序设计,7,10.1.3 Java文件管理 为了全面管理文件系统,Java还提供了两个类:一般文件类File和随机存取文件类RandomAccessFile。前者提供操作系统目录管理的功能,允许用户访问文件属性和路径等信息,后者用于有选择的读写文件。File类是一种重要的非流类 文件或目录的生成 2. 文件名的处理 3. 文件属性测

6、试 4. 普通文件信息和工具 5. 目录操作,2019年5月24日星期五2时24分32秒,Java 程序设计,8,10.2 多线程 多线程编程的含义是将程序任务分成几个并行的子任务。一个多线程程序包含两个或者多个同时并发运行的部分,每个部分称为一个线程(thread),每个线程定义了一个独立的执行路径。因此多线程是多任务的一种专门形式。,2019年5月24日星期五2时24分32秒,Java 程序设计,9,10.2.1 多线程的基础 线程(thread)和序列化程序是类似的,也有开始、执行序列和结束,执行时候也只有一个执行点。但线程不是程序,它不能自己运行,只能在程序中执行。这里把程序中单个序列

7、化的流程控制称为线程。一个线程在程序运行中,必须争取到为自己分配的系统资源,如执行堆栈、程序计数器等。单个线程没有什么特别意义。 多线程是相对单线程而言的,指的是在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。,2019年5月24日星期五2时24分32秒,Java 程序设计,10,10.2.2 多线程的实现 Java中实现多线程有两种方法: 方法1:通过继承线程类Thread来创建线程类,扩展java.lang.Thread类,用它覆盖Thread类的run方法; 方法2:通过建立一个实现Runnable接口的类来运行线程,生成实现java.lang.Runnable接

8、口的类,并将其他的实例与java.lang.Thread实例相关联。,2019年5月24日星期五2时24分32秒,Java 程序设计,11,10.2.3. 线程的生命周期 线程在它的生命周期内有4种状态,分别是创建(New Thread)、运行(Runnable)、挂起(Not Runnable)和结束(Dead)。 运行(Runnable),之所以该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻只能有一个处于可运行态的线程占用处理机,Java通过调度来实现多线程对处理机的共享。,2019年5月24日星期五2时24分32秒,Java 程序设

9、计,12,10.2.4 线程状态转换 1线程的优先级 线程在创建时,继承了父类的优先级。 2引起线程状态改变的方法 sleep(n) (2) yield() (3) join() (4) wait() (5) interrupt() (6) notify() (7) notifyAll() (8) suspend() (9) resume() (10) stop(),2019年5月24日星期五2时24分32秒,Java 程序设计,13,3线程状态的转换 当一个线程处于运行状态时,该线程占有CPU并世纪运行。此时,线程状态转换有三种情况: (1) 如果线程正常执行结束或应用程序停止运行时,线程进

10、入死亡状态。死亡状态没有任何方法可以改变。若要确认一个线程是否已经结束,可以调用Thread类的isAlive()方法。若返回true,表示线程正在执行,否则,表示线程已经终止。 (2) 如果当前线程执行了yield()方法,或者当前线程因调度策略(执行过程中,有一个更高优先级的线程进入可运行状态,这个线程立即被调度执行,当前线程占有的CPU被抢占。)的原因,导致当前线程进入可运行状态。,2019年5月24日星期五2时24分32秒,Java 程序设计,14,(3) 如果发生以下情况,线程就进入阻塞状态。 l 线程调用了sleep()、join()方法时,线程进入不可运行状态。 l 线程调用了w

11、ait()方法,线程由运行中状态转入阻塞状态。 l 如果线程使用了synchronized来实现对象的“互斥锁”联系,当前线程能获得使用权时,继续为运行中状态,继续执行;若当前线程没有获得使用权,进入阻塞状态。 若线程中有输入输出操作时,也可进入阻塞状态,待输入输出结束后,线程进入可运行状态。,2019年5月24日星期五2时24分32秒,Java 程序设计,15,10.2.5 多线程的同步 如果采用多线程同步控制机制,等到第一个线程读取完数据,第二个线程才能处理该数据,就会避免错误。可见,线程同步是多线程编程的一个相当重要的技术。 10.2.6 多线程的问题 由于多线程是同时运行于内存中,程序

12、员必须加倍注意自己的多线程程序,搞清楚它们之间的关系。否则还是少用几个线程,因为不是线程越多程序就执行得越快,还有很多因素决定着程序的执行速度。,2019年5月24日星期五2时24分32秒,Java 程序设计,16,10.3 网络编程 10.3.1 URL编程 URL表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。 URL是最为直观的一种网络定位方法,使用URL符合人们的语言习惯,容易记忆。,2019年5月24日星期五2时24分32秒,Java 程序设计

13、,17,10.3.2 使用URL类访问网络资源 一个URL对象生成后其属性是不能被改变的,但可以通过类URL所提供的方法来获取这些属性。 10.3.3 客户/服务器通过流Socket连接的交互 Java中的网络编程是一个很重要的部分,也是其编程优越性之一。,2019年5月24日星期五2时24分32秒,Java 程序设计,18,在Java中用Socket进行客户/服务器之间的通信编程。Socket是两个实体之间进行通信的有效端点。通过Socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个Socket连入同一个端口,以便对于单个端口可以有多个连接。通过Socket客户/服务

14、器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。,2019年5月24日星期五2时24分32秒,Java 程序设计,19,要想与服务器通信必须具备3个条件:服务器程序、客户程序和连接它们的Socket程序。这3个部分缺一不可。但是,客户与服务器之间的通信有很多的方式,其中一个方法是把客户作为索取者,把服务器作为给予者。,2019年5月24日星期五2时24分32秒,Java 程序设计,20,在Java中,服务器有两个主要的功能。 (1)在J类库中通过构造一个ServerSocket类的实例使服务器能够检测到指定端口的信息。用ServerSo

15、cket中的accept()方法可以使服务器检测到指定端口的活动。另外,服务器还负责检测要求与它连接的客户。Socket类的实例代表客户与服务器连接成功。通过编程可以使多个用户通过同一个端口与服务器相连,其中都是Socket类的实例。 (2)可以分别用Socket类的getInputStream( )和getOutStream( )方法来发送和捕捉数据。,2019年5月24日星期五2时24分32秒,Java 程序设计,21,10.3.4 无连接的客户/服务器通过数据报的交互 流式Socket可以实现准确的通信,但是占用资源较多,在某些无须实时交互的情况下,例如收发E-mail等,采用保持连接的流式通信并不恰当,而应该使用无连接的数据报方式。 数据报是无连接的远程通信服务,数据以独立的包为单位发送,不保证传送顺序和内容的准确性。因此包中往往需要包含序列号的信息,接收方根据序列号信息判断是否包都已收到,并按正常顺序重组这些包。数据报Socket无须建立、拆除连接,直接将信息打包传向指定的目的地,使用起来比流式Socket要简单一些。由于它不需要专用的网络连接,所以它所需的资源相对少得多。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号