您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 网络编程和多线程汇总
第5讲网络编程和多线程Applet的通信•同页Applet间的通信•嵌入在同一HTML文件中的Applet程序(同页)可以通过java.applet包中提供的接口、类方法进行通信。有用的接口为Applet环境上下文接口AppletContext,在该接口中定义了如下的方法:–publicAppletgetApplet(Stringname)查找和返回由Applet上下文指明的HTML文档中具有指定name的的Applet,name用HTML标记中name属性设置,是一个Applet字节码文件的名字。–publicEnumerationgetApplets()查找由Applet上下文指明的文档中所有的Applet。它返回的是枚举Enumeration对象,该对象枚举了页中所有的Applets,这时可通过接口Enumeration提供的方法hasMoreElements()和nextElement()来获得同页中所有的Applet对象。–publicbooleanhasMoreElements()测试该枚举对象是否包含更多的元素。–publicObjectnextElement()返回该枚举对象的下一个元素。若无更多的元素存在,则抛出异常“NoSuchElementException”。•Applet与浏览器之间的通信•在Applet类中提供了多种方法,使之可以与浏览器进行通信。前面介绍的Applet从HTML文件获得参数,实际上也是一种与浏览器之间的通信。下面再介绍一些Applet类中与浏览器通信的方法。–publicURLgetCodeBase()得到Applet自身的URL地址。URL的概念在下一节中介绍。–publicURLgetDocumentBase()返回嵌入Applet的HTML文档的绝对URL地址。例如,设Applet包含在下述文档中:––则HTML文档的URL地址为:––publicString[][]getParameterInfo()返回本Applet参数的信息,返回值为字符串数组,它的每个元素是包含三个字符串的一维数组,三个字符串分别为名称、类型和描述。–publicStringgetAppletInfo()返回本Applet的作者、版本、版权等信息。Applet的应用•访问资源•Applet程序经常有访问资源的需要,下面是相关的一些概念。•1.URL统一资源定位器•URL(UniformResourceLocator)是统一资源定位器的简称,它表示Internet上某一资源的地址。URL包括两方面的内容:协议名和资源名,中间用冒号隔开。例如:–•其中,协议名指明资源所使用的传输协议,例如,http,ftp等,资源名指明资源的地址,包括主机名、端口号、文件名等。有时URL中也包含资源文件名,例如:–•2.URL类•为了表示URL,在java.net包中提供了类URL来支持URL。类URL有六种构造方法,下面是一些常用的构造方法,它们可用来初始化一个URL对象。–URL(Stringspec)从字符串spec创建一个URL对象。–URL(Stringprotocol,Stringhost,intport,Stringfile)从指定的协议、主机、端口号和文件创建一个URL对象。–URL(Stringprotocol,Stringhost,Stringfile)从指定的协议、主机和文件创建一个URL对象。•3.获取URL对象的属性•一个URL对象生成后,其属性是不能改变的,但可以通过类URL的方法来获取这些属性。–ObjectgetContent(Class[]classes)返回URL对象的内容。–StringgetFile()返回URL对象的文件名。–StringgetHost()返回URL对象的主机名。–StringgetPath()返回URL对象的路径。–intgetPort()返回URL对象的端口号。若端口未设置则返回-1。–StringgetProtocol()返回URL对象的协议名。–有些协议的URL地址并不完全具备这些属性,但是,类URL仍然提供了这些方法,这是因为类URL是基于http协议的,而http协议下的URL包含上述这些属性。•访问网络资源•1.IP地址(InternetProtocol)•IP地址是网络上的通信地址,是计算机、服务器、路由器的端口地址,每一个IP地址在全球是唯一的,是运行TCP/IP协议的基础。•IP地址4字节长,每个字节对应一个小于256的十进制数,字节之间用点号分隔。例如,上海热线的IP地址是202.96.209.5和202.96.209.133等。•IP地址分为两部分内容:一部分为网络标识,另一部分为主机标识,根据第1个字节的数字范围不同,可分为A~E五类IP地址。•从用户上网的地址角度考虑,IP又可分为动态地址和静态地址两类。动态地址是指一台计算机与Internet连接,成为一台Internet上的主机,但每次连接得到的IP地址不一定是相同的。•2.InetAddress类•有时需要知道本机的IP地址或连接的对方计算机的IP地址,可使用Java语言的InetAddress类。java.net.InetAddress类继承于Object类,可用于描述一个IP地址。常用的方法有:–publicstaticInetAddressgetByName(Stringhost)throwsUnknownHostException确定所给主机名的主机IP地址。–publicstaticInetAddressgetLocalHost()throwsUnknownHostException返回本地主机和IP地址。•【例】获得本机主机名和IP地址(本例是拨号上网的结果)。–importjavax.swing.*;–importjava.net.*;–importjava.awt.*;–importjava.awt.event.*;–publicclassLocalHostextendsJApplet{–InetAddressHostAddr=null;–publicvoidstart(){–try{–HostAddr=InetAddress.getLocalHost();–}catch(UnknownHostExceptione){–System.err.println(e.getMessage());–}–repaint();–}–publicvoidpaint(Graphicsg){–g.drawString(Hostname/ip=–+HostAddr.toString(),10,30);–}–}•例8.11程序运行结果如下图所示。多线程概述•大多数程序设计时习惯上考虑该程序如何从头至尾顺序执行各项任务的设计方法,即一个程序只有一条执行路线。但现实世界中的很多过程都是同时发生的,对应这种情况,可编写有多条执行路径的程序,使得程序能够同时执行多个任务(并行)。•Java对多线程的支持•Java语言里,线程表现为线程类。Thread线程类封装了所有需要的线程操作控制。在设计程序时,必须很清晰地区分开线程对象和运行线程,可以将线程对象看作是运行线程的控制面板。在线程对象里有很多方法来控制一个线程是否运行,睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一旦一个Java程序启动后,就已经有一个线程在运行。可通过调用Thread.currentThread方法来查看当前运行的是哪一个线程。•在Java语言中,若创建了一个Thread类(多数情况是其子类)的实例对象,就形成了一个新的线程。运行线程的执行代码书写在run()方法中,通过调用线程对象的不同方法,可以控制线程的启动、暂时挂起、终止等。•下面是一些常用线程类的方法。•(1)类方法–currentThread()返回正在运行的Thread对象。–yield()停止运行当前线程,将CPU控制权主动移交到下一个可运行线程。–sleep(intn)让当前线程睡眠n毫秒,n毫秒后,线程可以再次运行。•(2)实例方法–start()为本线程建立一个执行环境,然后调用本线程的run()方法。–run()在其中书写运行本线程的将要执行的代码,也是Runnable接口的唯一方法。当一个线程初始化后,由start()方法来调用它,一旦run()方法返回,本线程也就终止了。–stop()让某线程马上终止,系统将删除本线程的执行环境。–suspend()将线程挂起,暂停运行,但系统不破坏线程的执行环境,可以用resume()来恢复本线程的执行。–resume()恢复被挂起的线程进入可运行状态。–setPriority(intp)给线程设置优先级1=p=10。–getPriority()返回线程的优先级。–setName(Stringname)赋予线程一个名字name。–getName()取得由setName()方法设置的线程名字的字符串。–wait(longtimeout)停止当前线程,直到另外的线程对这个对象使用notify()或notifyAll()方法。–notify()或notifyAll()唤醒指定对象的一个或所有线程。•线程的状态和生命周期•一个线程从创建、启动到终止期间的任何时刻,总是处于下面五个状态中的某个状态。•1.创建状态•用new运算符创建一个Thread类或子类的实例对象时,形成的新线程就进入创建状态,但此时还未对这个线程分配任何资源,没有真正执行它。•2.可运行状态•在创建线程后,若要执行它,系统要对这个线程进行登记,并为它分配系统资源,这些工作由start()启动方法来完成。线程启动后,将进入线程队列排队等待CPU时间片,成为可运行状态(或称为就绪状态)。此时线程已经具备了运行的条件,一旦它获得CPU等资源时,就可以脱离开创建它的主线程而独立运行。•3.运行状态•当可运行状态的线程被调度并获得CPU等资源时,便进入运行状态。•4.阻塞状态•由于人为或系统的原因,线程必须停止运行,以后还可以恢复运行的状态称为阻塞状态。发生以下几种情况之一后,线程进入阻塞状态。–(1)调用了该线程的sleep()休眠方法。–(2)该线程正在等待I/O操作完成。–(3)调用了wait()等待方法。–(4)调用了suspend()挂起方法。•5.终止状态•运行run()方法完成后或调用stop()或destroy()方法就进入线程的终止态(或称为死亡状态)。处于这种状态的线程不具有继续运行的能力。•线程的调度和优先级•处于可运行状态的线程进入线程队列排队等待CPU等资源时,同一时刻在队列中的线程可能有多个,它们完成各自任务的轻重缓急程度是不同的。为了体现上述差别,多线程系统会给每个线程自动分配一个线程的优先级。任务较重要或紧急的线程,分配较高的优先级,在可运行态的线程队列中就往前排;否则,就分配较低的优先级。优先级低的线程只能等到优先级高的线程执行完后才被执行。对于优先级相同的线程,则遵循队列的“先进先出”原则,即先到的线程先获得系统资源来运行。•在Java语言中,对一个新建的线程,系统会分配一个缺省的线程优先级:继承创建这个线程的主线程的优先级(一般为普通优先级)。Thread类也提供了方法setPriority()来修改线程的优先级。该方法的参数一般可用Thread类的优先级静态常量:–PRIORITY.NORM_PRIORITY普通优先级(5)–PRIORITY.MIN_PRIORITY最低优先级(1)–PRIORITY.MAX_PRIORITY最高优先级(10)多线程的实现方法与控制•编写多线程程序需要创建线程,线程的创建包
本文标题:网络编程和多线程汇总
链接地址:https://www.777doc.com/doc-3356676 .html