书签 分享 收藏 举报 版权申诉 / 59
上传文档赚钱

类型[计算机软件及应用]多线程程序设计课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:5102899
  • 上传时间:2023-02-11
  • 格式:PPT
  • 页数:59
  • 大小:571.52KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《[计算机软件及应用]多线程程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    计算机软件及应用 计算机软件 应用 多线程 程序设计 课件
    资源描述:

    1、Xueping SXueping Shen2想象一下,如果我们想要从想象一下,如果我们想要从InternetInternet上下载一上下载一段很长的视频或者音频片段,如果我们可以把段很长的视频或者音频片段,如果我们可以把下载任务放在一个独立的线程里实现,我们在下载任务放在一个独立的线程里实现,我们在下载开始之后很快就可以观看这个片段了,而下载开始之后很快就可以观看这个片段了,而不是必须等全部下载完成才可以观看。不是必须等全部下载完成才可以观看。此外,多线程的执行还可以允许许多用户同时此外,多线程的执行还可以允许许多用户同时访问一个公共的数据库,这个特性对于类似库访问一个公共的数据库,这个特性对

    2、于类似库存管理和机票预定这样的系统有时候显得非常存管理和机票预定这样的系统有时候显得非常有用。有用。为了防止由于多个用户同时读取和写入公共数为了防止由于多个用户同时读取和写入公共数据库而造成的数据破坏,多线程还需要在对象据库而造成的数据破坏,多线程还需要在对象上设置锁。这样一个时刻只有一个线程能够修上设置锁。这样一个时刻只有一个线程能够修改一个对象的状态。改一个对象的状态。Xueping Shen3如何实践对正在下载的视频进行同时观看;机票预订;并发的处理。Xueping Shen4线程的概念线程的概念线程的调度线程的调度创建和启动线程创建和启动线程ThreadThread线程类、线程类、Ru

    3、nnableRunnable接口接口多个线程的同步多个线程的同步线程之间的通信线程之间的通信Xueping Shen5程序:程序:是一段静态的代码,它是应用程序执行的蓝本。是一段静态的代码,它是应用程序执行的蓝本。进程:进程:是程序的一次动态执行过程,它对应了从代码加是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,也是进程本身从载、执行到执行完毕的一个完整过程,也是进程本身从产生、发展至消亡的过程。产生、发展至消亡的过程。目前所流行的操作系统中,大部分都是支持多任务的目前所流行的操作系统中,大部分都是支持多任务的(如如Windows 3.XWindows 3.X,W

    4、indows NTWindows NT,Windows 95Windows 95,OS/2OS/2及及UNIXUNIX的的各个版本各个版本),这实际就是一种,这实际就是一种多进程多进程的概念的概念每一个任每一个任务就是一个务就是一个。线程:线程:比进程更小的执行单位。比进程更小的执行单位。一个进程在执行过程中,一个进程在执行过程中,为了同时完成多项操作,可以产生多个线程,形成多条为了同时完成多项操作,可以产生多个线程,形成多条执行线索。每个线程都有它自身的产生、存在和消亡的执行线索。每个线程都有它自身的产生、存在和消亡的过程。过程。Xueping Shen6多进程多进程环境中每一个进程既包括其

    5、所要执行的指环境中每一个进程既包括其所要执行的指令令,也包括执行指令所需的任何系统资源也包括执行指令所需的任何系统资源,如如CPUCPU、内存空间、内存空间、I/OI/O端口等端口等,不同进程所占用的系统资不同进程所占用的系统资源相对独立;源相对独立;线程是比进程单位更小的执行单位,多线程环境线程是比进程单位更小的执行单位,多线程环境中每一个线程都隶属于某一进程中每一个线程都隶属于某一进程,由进程触发执行由进程触发执行,在系统资源的使用上在系统资源的使用上,属于同一进程的所有线程共属于同一进程的所有线程共享该进程的系统资源;享该进程的系统资源;与进程不同的是线程本身即没有入口,也没有与进程不同

    6、的是线程本身即没有入口,也没有出口,其自身也不能独立运行,它栖身于某个出口,其自身也不能独立运行,它栖身于某个进程之中,由进程启动运行,完成其任务后,进程之中,由进程启动运行,完成其任务后,自动终止,也可以由进程使之强制终止。自动终止,也可以由进程使之强制终止。Xueping Shen7多线程程序设计:多线程程序设计:是指单个程序包含是指单个程序包含的多个线程。当多的多个线程。当多线程程序执行时,该程序对应的进程中就有多线程程序执行时,该程序对应的进程中就有多个控制流在同时执行,个控制流在同时执行,即具有并发执行的多个即具有并发执行的多个线程;线程;例如:例如:PV操作操作Web Server

    7、接受客户端的请求问题接受客户端的请求问题银行问题银行问题网络聊天网络聊天(一对多一对多)程序程序Xueping Shen8一个多线程的例子一个多线程的例子:Test.javaTest.java此程序创建两个线程,分别执行存取款操作,并规定此程序创建两个线程,分别执行存取款操作,并规定每次存款每次存款2500025000元,每次取款元,每次取款5000050000元。元。Xueping Shen9进程、线程示意图进程、线程示意图 Xueping Shen10由于线程在程序内部,多个线程共享一些系统的开销,由于线程在程序内部,多个线程共享一些系统的开销,而而线程本身的数据通常只有微处理器的寄存器数

    8、据,以及一线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。个供程序执行时使用的堆栈。例如线程之间共享相同的内例如线程之间共享相同的内存单元存单元(代码和数据代码和数据),因此在线程间切换,不需要很大的,因此在线程间切换,不需要很大的系统开销,系统开销,所以线程之间的切换速度远远比进程之间快,所以线程之间的切换速度远远比进程之间快,线程之间的通信也比进程通信快的多。线程之间的通信也比进程通信快的多。多个线程轮流抢占多个线程轮流抢占CPUCPU资源而运行时,资源而运行时,从从微观微观上讲,一个时上讲,一个时间里只能有一个作业被执行,在间里只能有一个作业被执行,在宏观宏观

    9、上可使多个作业被同上可使多个作业被同时执行,即等同于要让多台计算机同时工作,时执行,即等同于要让多台计算机同时工作,使系统资源使系统资源特别是特别是CPUCPU的利用率得到提高,从而可以提高整个程序的执的利用率得到提高,从而可以提高整个程序的执行效率。行效率。Xueping Shen11Virtual CPUCodeDataThread txyz rclass xyz线程线程Xueping Shen121.1.每一个进程就是一个应用程序。有自己的入口和出口。每一个进程就是一个应用程序。有自己的入口和出口。2.2.多进程多进程环境中每一个进程既包括其所要执行的指令环境中每一个进程既包括其所要执行

    10、的指令,也包括也包括了执行指令所需的任何系统资源了执行指令所需的任何系统资源,如如CPUCPU、内存空间、内存空间、I/OI/O端端口等口等;3.3.不同进程所占用的系统资源相对独立。不同进程所占用的系统资源相对独立。1.1.多个线程可共同存在于一个应用程序中。多个线程可共同存在于一个应用程序中。2.2.多线程多线程环境中每一个线程都环境中每一个线程都隶属于某一进程隶属于某一进程,由进程触发执由进程触发执行(没有自己的入口和出口)行(没有自己的入口和出口);3.3.在系统资源的使用上在系统资源的使用上,属于同一进程的所有线程共享该进程属于同一进程的所有线程共享该进程的系统资源。的系统资源。线程

    11、之间切换的速度比进程切换要快得多线程之间切换的速度比进程切换要快得多。进程和线程的比较(总结)进程和线程的比较(总结)Xueping Shen13线程的调度(线程的调度(1 1)微观上,在一台只具有一个微观上,在一台只具有一个CPUCPU的机器上,的机器上,CPUCPU在同一在同一时间只能分配给一个线程做一件事。时间只能分配给一个线程做一件事。当有多于一个的线程工作时,在当有多于一个的线程工作时,在JavaJava中,线程调度通中,线程调度通常是常是,。一旦一个线程获得执行权,这个线程将持续运行下去,一旦一个线程获得执行权,这个线程将持续运行下去,直到它运行结束或因为某种原因而阻塞,或者有另一

    12、直到它运行结束或因为某种原因而阻塞,或者有另一个高优先级线程就绪(个高优先级线程就绪()。)。Xueping Shen14线程的调度(线程的调度(2 2)所有被阻塞的线程按次序排列,组成一个阻塞队列。例所有被阻塞的线程按次序排列,组成一个阻塞队列。例如如:因为需要等待一个较慢的外部设备,例如磁盘或用户。因为需要等待一个较慢的外部设备,例如磁盘或用户。让处于运行状态的线程调用让处于运行状态的线程调用Thread.sleep()Thread.sleep()方法。方法。让处于运行状态的线程调用另一个线程的让处于运行状态的线程调用另一个线程的join()join()方法。方法。所有就绪但没有运行的线程

    13、则根据其优先级排入一个就所有就绪但没有运行的线程则根据其优先级排入一个就绪队列。绪队列。当当CPUCPU空闲时,如果就绪队列不空,就绪队列中第一个具空闲时,如果就绪队列不空,就绪队列中第一个具有最高优先级的线程将运行。有最高优先级的线程将运行。当一个线程被抢占而停止运行时,它的运行态被改变并当一个线程被抢占而停止运行时,它的运行态被改变并放到就绪队列的队尾;放到就绪队列的队尾;一个被阻塞(可能因为睡眠或等待一个被阻塞(可能因为睡眠或等待I/OI/O设备)的线程就绪设备)的线程就绪后通常也放到就绪队列的队尾。后通常也放到就绪队列的队尾。Xueping Shen15线程的调度是按:线程的调度是按:

    14、1.其优先级的高低顺序执行的;其优先级的高低顺序执行的;2.同样优先级的线程遵循同样优先级的线程遵循“先到先执行的原则先到先执行的原则”;线程优先级线程优先级:范围:范围 110 110(10 10 级)。数值越大,级别越高级)。数值越大,级别越高Thread Thread 类定义的类定义的 3 3 个常数:个常数:MIN_PRIORITY MIN_PRIORITY 最低最低(小小)优先级(值为优先级(值为1 1)MAX_PRIORITY MAX_PRIORITY 最高最高(大大)优先级(值为优先级(值为1010)NORM_PRIORITY NORM_PRIORITY 默认优先级(值为默认优先

    15、级(值为5 5)线程创建时,继承父线程的优先级。线程创建时,继承父线程的优先级。常用方法:常用方法:getPrioritygetPriority()():获得线程的优先级:获得线程的优先级setPrioritysetPriority()():设置线程的优先级:设置线程的优先级ThreadPriThreadPri.java.javaXueping Shen16Xueping Shen17主线程主线程主线程主线程:main()main()方法方法Application Application 应用程序应用程序每当用每当用javajava命令启动一个命令启动一个JavaJava虚拟机进程虚拟机进程(

    16、Application Application 应用程序),应用程序),JavaJava虚拟机就会虚拟机就会创建一个主线程,该线程从程序入口创建一个主线程,该线程从程序入口main()main()方法方法开始执行。开始执行。浏览器中加载的浏览器中加载的 Applet Applet 主类主类Applet Applet 小程序小程序多线程多线程:在主线程中创建在主线程中创建 Thread Thread 类或其子类类或其子类对象时,就创建了一个线程对象。对象时,就创建了一个线程对象。ProgrammerProgrammer可以控制线程的启动、挂起与终止。可以控制线程的启动、挂起与终止。Xueping

    17、 Shen18public class Sample public void method1(String str)System.out.println(str);public void method2(String str)method1(str);public static void main(String args)Sample s=new Sample();s.method2(hello);main()方法方法method1()方法方法method2()方法方法主线程的方法调用栈主线程的方法调用栈当我们运行java Sample命令时,java虚拟机会给每个线程分配方方法调用栈,用于跟

    18、踪每个线程调用方法的信息,同时方法调用栈法调用栈,用于跟踪每个线程调用方法的信息,同时方法调用栈还用做线程的工作区,方法局部变量会存放到方法调用栈中还用做线程的工作区,方法局部变量会存放到方法调用栈中Xueping Shen19在一个多线程运行环境中运行的线程可以有多种状态在一个多线程运行环境中运行的线程可以有多种状态,也也就是说一个线程在不同时刻会处于下列状态之一就是说一个线程在不同时刻会处于下列状态之一:新建、就绪、运行、阻塞、终止;新建、就绪、运行、阻塞、终止;BlockedBlocked终止终止新生成新生成一个线程一个线程RunnableRunnableRunningRunningst

    19、art()start()yield()yield()notify()notify()wait(),sleep(),join()wait(),sleep(),join()Xueping Shen20新建新建:当一个:当一个 Thread Thread 类或其子类对象被创建时,新类或其子类对象被创建时,新产生的线程处于新建状态,此时它已经有了相应的内产生的线程处于新建状态,此时它已经有了相应的内存空间和其他资源。如:存空间和其他资源。如:Thread myThread=new Thread myThread=new MyThreadClassMyThreadClass();();就绪就绪:调用:调

    20、用 start()start()方法来启动处于新建状态的线方法来启动处于新建状态的线程后,将进入线程队列排队等待程后,将进入线程队列排队等待 CPU CPU 服务,此时它已服务,此时它已经具备了运行的条件,经具备了运行的条件,一旦轮到它来享用一旦轮到它来享用 CPU CPU 资源时,资源时,就可以脱离创建它的主线程,开始自己的生命周期。就可以脱离创建它的主线程,开始自己的生命周期。运行运行:当就绪状态的线程被调度并获得处理器资源时,:当就绪状态的线程被调度并获得处理器资源时,便进入运行状态。便进入运行状态。每一个每一个 Thread Thread 类及其子类的对象类及其子类的对象都有一个重要的

    21、都有一个重要的 run()run()方法,当线程对象被调用执方法,当线程对象被调用执行时,它将自动调用本对象的行时,它将自动调用本对象的 run()run()方法,从第一方法,从第一句开始顺序执行。句开始顺序执行。Run()Run()方法定义了这个线程的操作方法定义了这个线程的操作和功能。和功能。Xueping Shen21阻塞:一个正在执行的线程暂停自己的执行而进入的阻塞:一个正在执行的线程暂停自己的执行而进入的状态。状态。引起线程由运行状态进入阻塞状态的可能情况:引起线程由运行状态进入阻塞状态的可能情况:该线程正在等待该线程正在等待 I/O I/O 操作的完成操作的完成调用了该线程的调用了

    22、该线程的 sleep()sleep()方法方法调用了调用了 wait()wait()方法方法让处于运行状态的线程调用另一个线程的让处于运行状态的线程调用另一个线程的join()join()方方法法Xueping Shen22对应于不同进入阻塞状态的情况,采取不同的方对应于不同进入阻塞状态的情况,采取不同的方法使其回到就绪状态:法使其回到就绪状态:I/O I/O 操作:等待这个操作:等待这个 I/O I/O 操作完成后;操作完成后;sleep()sleep()方法:等待其指定的休眠事件结束后,方法:等待其指定的休眠事件结束后,自动脱离阻塞状态;自动脱离阻塞状态;调用调用 wait()wait()

    23、方法:调用方法:调用 notify()notify()或或 notifyAll()notifyAll()方法;方法;Xueping Shen23终止:终止:自然终止:自然终止:线程完成了自己的全部工作线程完成了自己的全部工作强制终止:强制终止:在线程执行完之前,调用在线程执行完之前,调用 stop()stop()或或 destroy()destroy()方法终止线程方法终止线程Xueping Shen24创建状态创建状态可运行状态可运行状态阻塞状态阻塞状态终止状态终止状态Start()Run()结束结束Stop()Stop()I/O受阻受阻Suspend()Wait()Sleep()Sleep

    24、()结束结束Notify()Resume()I/O完成完成Xueping Shen25JavaJava中的多线程是建立在中的多线程是建立在ThreadThread类类,Runnable,Runnable接口接口的的基础上的基础上的,通常有两种办法让我们来创建一个新的线,通常有两种办法让我们来创建一个新的线程:程:创建一个创建一个ThreadThread类类,或者一个或者一个ThreadThread子类的对象;子类的对象;创建一个实现创建一个实现RunnableRunnable接口的类的对象;接口的类的对象;Xueping Shen26Thread的构造方法的构造方法Thread();Threa

    25、d(Runnable target);Thread(Runnable target,String name);Thread(String name);Thread(ThreadGroup group,Runnable target);Thread(ThreadGroup group,Runnable target,String name);Thread(ThreadGroup group,Runnable target,String name,long stackSize);Thread(ThreadGroup group,String name);namename:线程的名称线程的名称,ta

    26、rgettarget:要运行的线程对象要运行的线程对象,groupgroup:线程组的名线程组的名称称,stackSizestackSize:堆栈的大小堆栈的大小ThreadThread类介绍类介绍Xueping Shen27ThreadThread类介绍类介绍Thread的主要方法的主要方法(共共34个个,其中其中5个不再使用了个不再使用了)static Thread currentThread();int getPriority();String getName();ThreadGroup getThreadGroup();void interrupt();boolean isInterr

    27、upted();void join();join(long millis);join(long millis,int nanos);static void yield();void setName(String name);void setPriority(int priority);void start();boolean isAlive();static void sleep(long millis,int nanos);void run();static void sleep(long millis);countStackFrames();suspend();resume();stop(

    28、);stop(Throwable obj);Xueping Shen28ThreadThread类的常用方法类的常用方法1.1.currentThread()currentThread():返回当前运行的:返回当前运行的ThreadThread对象。对象。2.2.setName()setName():设置线程的名字。:设置线程的名字。3.3.getName()getName():返回该线程的名字。:返回该线程的名字。4.4.setPriority()setPriority():设置线程优先级。:设置线程优先级。5.5.getPriority()getPriority():返回线程优先级。:返回

    29、线程优先级。6.6.start()start():启动一个线程。:启动一个线程。7.7.run()run():线程体:线程体,由由start()start()方法调用方法调用,当当run()run()方法返方法返回时回时,当前的线程结束。当前的线程结束。8.8.stop()stop():使调用它的线程立即停止执行。:使调用它的线程立即停止执行。9.9.isAlive()isAlive():如果线程已被启动并且未被终止,那么:如果线程已被启动并且未被终止,那么isAlive()isAlive():返回:返回truetrue。如果返回。如果返回falsefalse,则该线程,则该线程是新创建或是已

    30、被终止的。是新创建或是已被终止的。Xueping Shen29ThreadThread类的常用方法类的常用方法10.10.sleep(int n)sleep(int n):使线程睡眠:使线程睡眠n n毫秒毫秒,n,n毫秒后毫秒后,线程可以再线程可以再次运行次运行。11.11.yield()yield():将:将CPUCPU控制权主动移交到下一个可运行线程。控制权主动移交到下一个可运行线程。12.12.join()join():方法:方法join()join()将引起现行线程等待,直至方法将引起现行线程等待,直至方法joinjoin所调用的线程结束。所调用的线程结束。13.13.suspend(

    31、)suspend():使线程挂起使线程挂起,暂停运行。暂停运行。14.14.resume()resume()恢复挂起的线程恢复挂起的线程,使其处于可运行状态使其处于可运行状态(RunnableRunnable)。)。15.15.wait()wait():16.16.notify()notify():17.17.notifyAll()notifyAll():suspend();suspend();resume();resume();Stop();Stop();目前已经不再使用。为什么?请目前已经不再使用。为什么?请看看API.API.Xueping Shen30因为因为JavaJava线程的调度

    32、不是分时的,所以你必须确保你线程的调度不是分时的,所以你必须确保你的代码中的线程会不时地给另外一个线程运行的机会。的代码中的线程会不时地给另外一个线程运行的机会。有三种方法可以做到一点:有三种方法可以做到一点:让处于运行状态的线程调用让处于运行状态的线程调用Thread.sleep()Thread.sleep()方法。方法。让处于运行状态的线程调用让处于运行状态的线程调用Thread.yield()Thread.yield()方法。方法。让处于运行状态的线程调用另一个线程的让处于运行状态的线程调用另一个线程的join()join()方法方法。Xueping Shen31sleep()和和yie

    33、ld()的区别的区别这两个方法都是静态的实例方法。这两个方法都是静态的实例方法。yield()让运行中的线程主动放弃当前获得的让运行中的线程主动放弃当前获得的CPU处理处理机会,但不是使该线程阻塞,而是使之转入就绪状态。机会,但不是使该线程阻塞,而是使之转入就绪状态。yield()给相同优先级或更高的线程运行机会给相同优先级或更高的线程运行机会,如果当,如果当前没有存在相同优先级的线程,则前没有存在相同优先级的线程,则yield()什么都不做。什么都不做。而而sleep()不会考虑线程的优先级,会给其他线程运行不会考虑线程的优先级,会给其他线程运行的机会,因此也会给相同或更低优先级线程运行机会

    34、的机会,因此也会给相同或更低优先级线程运行机会。sleep()使线程转入阻塞状态,而使线程转入阻塞状态,而yield()使线程转入使线程转入runnable状态。状态。sleep()会有中断异常抛出会有中断异常抛出,而,而yiled()不抛出任何异常。不抛出任何异常。sleep()方法具有更好的可移植性方法具有更好的可移植性,因为,因为yield()的实现还的实现还取决于底层的操作系统对线程的调度策略。取决于底层的操作系统对线程的调度策略。对于对于yield()的主要用途是在测试阶段,人为的提高程的主要用途是在测试阶段,人为的提高程序的并发性能,以帮助发现一些隐藏的并发错误序的并发性能,以帮助

    35、发现一些隐藏的并发错误,当,当程序正常运行时,则不能依靠程序正常运行时,则不能依靠yield方法提高程序的并方法提高程序的并发行能。发行能。Xueping Shen321.1.方法方法wait()wait()与与sleep()sleep()方法一样,都能使线程等方法一样,都能使线程等待而停止运行,待而停止运行,其区别在于其区别在于sleep()sleep()方法不会释方法不会释放对象的锁,而放对象的锁,而wait()wait()方法进入等待时,可以释方法进入等待时,可以释放对象的锁,因而别的线程能对这些加锁的对象放对象的锁,因而别的线程能对这些加锁的对象进行操作。所以,进行操作。所以,wait

    36、,notifywait,notify和和notifyAllnotifyAll都是都是与同步相关联的方法与同步相关联的方法,只有在只有在synchronizedsynchronized方法方法中才可以用。中才可以用。2.2.在不同步的方法或代码中则使用在不同步的方法或代码中则使用sleep()sleep()方法使方法使线程暂时停止运行。线程暂时停止运行。Xueping Shen33 线程类线程类ThreadThread中提供以下几个版本的中提供以下几个版本的join()join()方法。方法。使当前正在运行的线程暂停下来,等待指定的时间后使当前正在运行的线程暂停下来,等待指定的时间后或等待调用该

    37、方法的线程结束后,再恢复运行。或等待调用该方法的线程结束后,再恢复运行。1.1.public final void join()throws public final void join()throws InterruptedExceptionInterruptedException;2.2.public final void join(long millis,int public final void join(long millis,int nanos)throws InterruptedExceptionnanos)throws InterruptedException;3.3.publ

    38、ic final void join(long millis)throws public final void join(long millis)throws InterruptedExceptionInterruptedException;join()join()方法:方法:举例:举例:TestSubThread2.javaTestSubThread2.javaXueping Shen34public void timeout()/暂停该线程,等候其他线程暂停该线程,等候其他线程(tt)结束结束tt.join();/其他线程结束后,继续进行该线程其他线程结束后,继续进行该线程 join():

    39、方法:方法join()将引起现行线程等待,直至方法将引起现行线程等待,直至方法join所调用的线程结束。所调用的线程结束。Xueping Shen35Xueping Shen361.将一个类定义为将一个类定义为Thread的子类的子类,那么这个类就可以那么这个类就可以 用来创建线程。用来创建线程。2.这个类中有一个这个类中有一个至关重要的方法至关重要的方法public void run,这个方法称为,这个方法称为线程体线程体,它是整个线程的,它是整个线程的核心核心,线程线程所要完成任务的代码都定义在所要完成任务的代码都定义在线程体线程体中,实中,实际上际上不同功能的线程之间的区别不同功能的线程

    40、之间的区别就在于它们线程体就在于它们线程体的不同的不同举例:举例:ThreadTester.java TestSubThread.java TestMyThread.java Example19_1.javaExample19_1.java UseThreadUseThread.java.java应用线程类创建线程应用线程类创建线程Xueping Shen37创建线程对象创建线程对象启动一个线程启动一个线程线程体线程体的执行的执行线程子类名线程子类名 线程对象名线程对象名=new 线程子类名(实际参数)线程子类名(实际参数)线程对象名线程对象名.start();Run()方法的执行方法的执行T

    41、imePrinter.javaXueping Shen38Thread.sleep()方法的使用,注意异常的抛出Xueping Shen39Xueping Shen40Xueping Shen41Thead.yield()方法Xueping Shen42主线程和其他线程共存Xueping Shen43Xueping Shen44Thread.sleep()方法方法的使用,注意异常的使用,注意异常的抛出的抛出Xueping Shen45Xueping Shen46join()方法的使用,注意异常的抛出。保证了主线程最后结束Xueping Shen47Xueping Shen48Xueping S

    42、hen49Xueping Shen50应用应用Runnable接口创建线程接口创建线程1.Runnable是是Java中用以实现线程的接口,中用以实现线程的接口,从根本从根本上讲,任何实现线程功能的类都必须实现该接口。上讲,任何实现线程功能的类都必须实现该接口。Thread(Runnable target);Thread(Runnable target,String name);2.Runnable接口中只定义了一个方法就是接口中只定义了一个方法就是run()方方法,也就是线程体。法,也就是线程体。举例举例:TimePrinter1.java TestMyClassThread.java Us

    43、eRunnable.java UseRunnable.htmlXueping Shen51Xueping Shen52Xueping Shen53Xueping Shen541.因为因为Java只允许单继承,如果一个类已经继承了只允许单继承,如果一个类已经继承了Thread,就不能再继承其他类。,就不能再继承其他类。n比如对于比如对于Applet程序,由于必须继承程序,由于必须继承java.applet.Applet,因此就只能采取这种实现接口的方,因此就只能采取这种实现接口的方法。法。2.特别是在除了特别是在除了run()方法以外方法以外,并不打算重写并不打算重写Thread类类的其它方法的

    44、情况下的其它方法的情况下,以实现以实现Runnable接口的方式生成接口的方式生成新线程就显得更加合理了。新线程就显得更加合理了。适用于采用实现适用于采用实现Runnable接口方法的情况接口方法的情况Xueping Shen55终止线程终止线程当线程执行完当线程执行完run()run()方法,它将自然终止运行。方法,它将自然终止运行。ThreadThread有一个有一个stop()stop()方法,可以强制结束线方法,可以强制结束线程,但这种方法是不安全的。因此,在程,但这种方法是不安全的。因此,在JDK1.2JDK1.2开始的版本中,开始的版本中,stop()stop()方法已经被废弃。方

    45、法已经被废弃。实际编程中,一般是定义一个标志变量,然后实际编程中,一般是定义一个标志变量,然后通过程序来改变标志变量的值,从而控制线程通过程序来改变标志变量的值,从而控制线程从从run()run()方法中自然退出。方法中自然退出。Xueping Shen56Xueping Shen571.创建一个创建一个Thread类的子类类的子类2.在子类中将希望该线程做的工作写到在子类中将希望该线程做的工作写到run()里面里面3.生成该子类的一个对象生成该子类的一个对象4.调用该对象的调用该对象的start()方法方法class MyThread extends Thread public void r

    46、un()/其它方法等其它方法等class MyClass public static void main(String args)MyThread mt=new MyThread();mt.start();/其它方法等其它方法等创建用户多线程的步骤(创建用户多线程的步骤(1)省略号代表的是我们想省略号代表的是我们想让这个线程完成的工作让这个线程完成的工作调用调用start(),就会生成一个新的就会生成一个新的线程线程,并开始执行并开始执行run()里规定的里规定的任务任务Xueping Shen581.1.创建一个实现创建一个实现RunnableRunnable接口的类接口的类2.2.在该类中

    47、将希望该线程做的工作写到在该类中将希望该线程做的工作写到run()run()里面里面3.3.生成该类的一个对象生成该类的一个对象4.4.用上述对象去生成用上述对象去生成ThreadThread类的一个对象类的一个对象5.5.调用调用ThreadThread类的对象的类的对象的start()start()方法方法class MyRunnable implements Runnable public void run()/其它方法等其它方法等class MyClass public static void main(String args)MyRunnable mr=new MyRunnable(

    48、);Thread t=new Thread(mr);t.start();/其它方法等其它方法等创建用户多线程的步骤创建用户多线程的步骤(2)(2)省略号代表的是我们想省略号代表的是我们想让这个线程完成的工作让这个线程完成的工作调用调用Thread对象的对象的start(),就会生成一就会生成一个新的线程个新的线程,并开始执行并开始执行MyRunnable类类的的run()里规定的任务里规定的任务Xueping Shen591.创建一个实现创建一个实现Runnable接口的类接口的类2.在该类中将希望该线程做的工作写到在该类中将希望该线程做的工作写到run()里面里面3.写一个写一个start(

    49、)方法方法,在里面创建在里面创建Thread,调用调用start()4.生成生成Runnable类的一个对象类的一个对象5.调用该类对象的调用该类对象的start()方法方法class MyRunnable implements Runnable public void run()public void start()new Thread(this).start();/其它方法等其它方法等class MyClass public static void main(String args)MyRunnable mr=new MyRunnable();mr.start();/其它方法等其它方法等创建用户多线程的步骤创建用户多线程的步骤(3)省略号代表的是我们想省略号代表的是我们想让这个线程完成的工作让这个线程完成的工作调用调用start(),就会生成一个新的线程就会生成一个新的线程,并并开始执行开始执行run()里规定的任务里规定的任务以以this为参数生成一个为参数生成一个Thread类的对象类的对象,并调用它的并调用它的start()方方法法

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:[计算机软件及应用]多线程程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-5102899.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库