Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络

上传人:E**** 文档编号:89396241 上传时间:2019-05-24 格式:PPT 页数:28 大小:66.50KB
返回 下载 相关 举报
Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络_第1页
第1页 / 共28页
Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络_第2页
第2页 / 共28页
Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络_第3页
第3页 / 共28页
Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络_第4页
第4页 / 共28页
Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络》由会员分享,可在线阅读,更多相关《Java程序设计实用教程 教学课件 ppt 作者 秦学礼 等 第10章 多线程与网络(28页珍藏版)》请在金锄头文库上搜索。

1、第10章 多线程与网络编程,10.1多线程 10.2 网络编程,10.1多线程,10.1.1多线程基本概念 10.1.2创建线程的方式 10.1.3线程的控制 10.1.4线程的优先级及终止 10.1.5多线程的互斥与同步,10.1.1多线程基本概念,从根本上讲,多线程程序必须对多项独立活动进行协调,避免线程间的互相干扰。多线程程序涉及到普通的单线程程序中不存在的4个新的重要方面:互斥性、同步化、调度和死锁。了解这些概念之后将有助于你编写正确的多线程程序。,线程,一个线程是一个程序内部的一个顺序控制流。线程并不是程序,它自己本身并不能运行,必须在程序中运行。在一个程序中可以实现多个线程,这些线

2、程同时运行,完成不同的功能。 从逻辑的观点来看,多线程意味着一个程序的多行语句同时执行,但是多线程并不等于多次启动一个程序,操作系统也不会把每个线程当作独立的进程来对待,互斥,程序中的线程通常必须联合起来共同执行一项任务。合作会产生不同线程访问相同资源的问题。当多个线程共享普通资源(字段、数组、对象或文件)时,可能会发生一个以上的线程同时对同一资源进行访问。 要避免同时访问,则要设置资源的互斥访问。正确的程序每次只有一个线程可以访问受互斥保护的资源。,同步,为了协同工作,线程需要一种进行通信和协调操作的方法。 与时间有关的并发活动的协调称为同步。线程同步通常涉及到在未满足特定条件或其他线程执行

3、的特定计算之前让某线程等待。 如果某线程在一段时间内一直等待,则该线程将被锁定。,线程调度,当某个进程涉及到多个线程时,可用的PE会快速成功地执行所有线程。实际上,当前个线程放弃该PE时,接下来要运行哪个线程取决于线程系统的调度策略。Java线程具有priority属性,该属性影响调度,将在后面对其进行介绍。,死锁,当多个线程以各种方式相互独立时(其互斥资源保持共享和子任务保持同步),则有可能导致死锁。当线程等待永远都不会发生的事件时会出现死锁情况。 例如,在为线程B生成输出之前,线程A正在等待来自线程B的数据。在线程B为线程A生成数据之前,线程B正在等待接收来自线程A的一些数据。,10.1.

4、2创建线程的方式,Java程序从主线程(Java应用程序的main方法)或applet控制线程开始执行。主线程可以产生其他线程以实现并发运行。主线程完成后,Java程序就会终止。 线程是运行自身代码的独立控制指令。在Java中,线程是可以扩充Thread类或实现Runnable接口的类的对象。线程的入口点是它的run方法,下面是run方法的声明格式: public void run();,例10.1 一个创建线程的例子,算法分析: 定义一个Odd类。 创建主类。 使用run方法执行和中止线程。 在屏幕输出20个结果。,10.1.3线程的控制,父线程通过创建Thread类的对象并调用其start

5、方法来启动子线程。start方法使该对象成为个准备运行的新线程。第一次轮到该线程执行时,JVM就会调用run方法。线程可以处于以下5种状态中的一种状态: 新生该线程是新创建的。 就绪该线程准备运行或继续运行。 运行正在执行该线程。 阻塞该线程正在等待事件且不接收PE服务。 终止该线程已经完成,而且不能再运行 注意:如果线程处于就绪、运行或阻塞状态,则该线程有效,10.1.4线程的优先级及终止,线程的优先级 Java提供一个线程调度器来监控程序中启动后进入可运行状态的所有线程。线程调度器按照线程的优先级决定调度哪些线程来执行,具有高优先级的线程会在较低优先级的线程之前得到执行。 线程的终止 线程

6、通常在其run方法返回时终止。要终止一个线程,最好的方法通常是使其run方法返回。推荐的方法是定期为run方法检查继续执行的条件并在当该条件不再为真时返回。,10.1.5多线程的互斥与同步,线程的互斥 例10.2 一个互斥线程的例子。 算法分析: 定义MaxGuard类、FindMax类。 创建主类。 使用run方法执行和中止线程。 由主线程获取所需的结果。,10.1.5多线程的互斥与同步,同步 例10.3 一个同步线程的例子。 算法分析: 定义MyLock、FindMin类。 创建主类。 使用run方法执行和中止线程。 由主线程获取所需的结果。,10.2 网络编程,10.2.1 网络基本概念

7、 10.2.2 Java与Internet 10.2.3 使用InetAddress 10.2.4 使用URL 10.2.5 Socket通信 10.2.6 数据报通信,10.2.1 网络基本概念,计算机网络 计算机网络是一种高速通信媒介,用来连接许多不同的计算机或主机。网络是计算机与通信硬件和软件的组合,其目的是在多台主机之间以及不同主机的两个进程(执行程序)之间提供快速可靠的信息交换。Web是最为常用的Internet服务之一。其他服务包括电子邮件、文件传输、远程作业输入和远程登陆,这里仅提到了少数服务。,客户机和服务器,服务器进程运行在称之为服务器的计算机上,它提供一项具体的服务,如远程

8、主机访问(telnet)、文件传输(ftp)和Web(http)。每项标准的Internet服务都有自己独特的端口号,该端口号在所有的计算机上均相同。端口号和计算机的Internet地址标识特定服务器在网络上的位置。例如,ftp具有端口21,http具有端口80。 客户进程运行在称之为客户机的计算机上,它与服务器上的服务器进程通信以获取其服务。,URL,URL是在Internet上标识和查找资源(文件和服务)的标准方式。URL可以指定以下信息: 模式服务(协议)类型,例如Web服务器的http协议。 主机主机的域名或IP号,例如,。 端口号服务器的整型端口号,通常只有当使用非标准端口时才指定。

9、 文件名文件的路径名,如index.html。此名称是文档根路径(服务器配置的位置)的相对路径。 查询字符串用作服务器端服务参数的名-值对的字符串。,10.2.2 Java与Internet,Java中有关网络方面的功能都定义在程序包中。Java所提供的网络功能可大致分为三大类: URL和URLConnection:这是三大类功能中最高级的一种。通过URL的网络资源表达方式,很容易确定网络上数据的位置。利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端。 Socket:所谓Socket,可以想像成两个不同的程序通过网络的通道,而这是传统网络程序中

10、最常用的方法。一般在TCP/IP网络协议下的客户服务器软件采用Socket作为交互的方式。 Datagram:是这些功能中最低级的一种。其他网络数据传送方式,都假想在程序执行时,建立一条安全稳定的通道。但是以Datagram的方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。也就是说,Datagram不能保证传送质量。,10.2.3 使用InetAddress,.InetAddress类是Java的IP地址封装类,它不需要用户了解如何实现地址的细节。 InetAddress描述了32位或128位IP地址,

11、要完成这个功能,InetAddress类主要依靠两个支持类Inet4Address 和 Inet6Address,这三个类是继承关系,InetAddress是父类,Inet4Address 和 Inet6Address是子类。,创建InetAddress对象的方法,InetAddress类没有构造方法,要创建该类的实例对象,可以通过该类的静态方法获得该对象。这些静态方法如下: public static InetAddress getLocalHost() 方法getLocalHost()获得本地机的InetAddress对象,当查找不到本地机器的地址时,触发一个UnknownHostExce

12、ption异常。 public static InetAddress getByName (String host) 方法getByName(String host)获得由host指定的InetAddress对象,host是计算机的域名(也就是名字),其作用跟IP地址一样,只不过域名标识计算机比IP标识计算机更易于记忆。如果找不到主机会触发UnknownHostException异常。,例10.4 一个查询IP地址版本的例子,算法分析: 用getLocalHost()方法得到本地的IP地址。 用getAddress()方法返回IP字节数组。 判断IP地址字节数和其类别。 输出判断结果。,例10

13、.5 一个查询IP地址和主机名的例子,算法分析: 用getHostName()方法得到本地的主机名。 用getAddress()方法返回IP字节数组。 使用toSring()方法得到主机名和IP地址。 输出查询结果。,10.2.4 使用URL,你可以使用URL类创建和操纵URL。URL构造函数提供了初始化URL对象的有效方式: URL(url-string):参数是所使用的url字符串。 URL(URL,relative-url):参数一是所使用的完全url,参数二是相对url。 URL(sheme,host,filename):三个参数分别为:协议名,主机名,文件名。 URL(scheme,

14、host,port,filename):四个参数分别为:协议名,主机名,端口号,文件名。,例10.6 一个使用URL的例子,算法分析: 创建URL对象来接受URL地址。 创建InputStream对象用来输出文件内容。 读取并输出每个字节。,10.2.5 Socket通信,Internet客户程序使用流套接字访问基于TCP协议的服务器。Java的Socket类提供了对流套接字的轻松访问。 Socket soc=new Socket(String host,int port); 在主机给定的端口上打开与服务器相连的流套接字soc。调用可能会抛出IOException或UnknownHostExc

15、eption。 建立SOC时,下面的代码: OutputStream out=soc.getOutputStream(); InputStream in=soc.getInputStream(); 会产生与目标服务器通信的I/O流。,例10.7 一个Socket通信的例子,算法分析: 创建Socket类的对象与主机连接。 将命令行参数发送给服务器。 接收和显示返回消息。,10.2.6 数据报通信,Java还支持数据报套接字: DatagramSocket该类用于创建服务器或客户数据报套接字以及提供send和receive方法 DatagramPacket该类用于构造和操纵通过数据报套接字发送和接收的数据报报文 遵从UDP协议的网络服务使用数据报。了解了流套接字描述和例子之后,你将能够通过读取API来处理数据报应用程序。,

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

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

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