08多线程并发编程电子课件 Java程序设计案例教程.pptx
《08多线程并发编程电子课件 Java程序设计案例教程.pptx》由会员分享,可在线阅读,更多相关《08多线程并发编程电子课件 Java程序设计案例教程.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、模块8 多线程并发编程学习目标01掌握有关线程的基本概念。02掌握通过创建Thread类的子类和通过实现Runnable接口实现多线程的方法。03了解线程的状态和生命周期。05了解线程同步的概念。04了解线程优先级和线程调度。技能目标1.能够在MyEclipse IDE中编程创建Thread类的子类实现多线程。2.能够在MyEclipse IDE中编程实现Runnable接口实现多线程。3.能够在MyEclipse IDE中编程实现线程同步。8.1 回顾与思考多线程是Java的重要特性之一。如果一个程序是单线程的,那么,任何时刻都只有一个执行点。这种单线程执行方法使系统的运行效率偏低,而且,由
2、于必须依靠中断来处理输入/输出,所以,当出现频繁输入/输出或有优先级较低的中断请求时,实时性就变得很差。多线程系统可以避免这个缺点。所谓多线程,就是通过系统的调用使几个具有不同功能的程序流即线程并行运行。多线程可以实现同一时刻执行多个程序,使程序执行的效率变得更高。浏览器就是一个典型的多线程例子。在浏览器中可以一边下载文件,一边播放音频和视频,一边打印文档等。多线程是实现并发的一种有效手段。Java在平台上提供了对多线程的有效支持,利用语言和运行支持系统提供的复杂同步机制,同时还确保了线程的安全性。8.2 线程的使用8.2.1 线程的基本结构1.继承Thread类(1)Thread类。Thre
3、ad类是负责向其他类提供线程功能的最主要的类,为了向一个类增加线程功能,可以简单地从Thread类派生一个类,并重写run()方法。run()方法是线程发生的地方,它常常被称为线程体。Thread类的常用构造方法及成员方法见表8-1。表8-1 Thread类的常用构造方法及成员方法8.2 线程的使用8.2.1 线程的基本结构1.继承Thread类(2)用创建Thread类的子类实现多线程。若用这种方法实现多线程,用户须在程序中创建Thread类的子类,并在子类中重写Thread类的run()方法来定义线程体以实现线程的具体功能,然后创建该子类的对象以创建线程,当用户创建的线程调用start()
4、方法启动时,run()方法将被系统自动执行。8.2 线程的使用8.2.1 线程的基本结构1.继承Thread类【例8-1】通过定义Thread类的子类实现多线程。文件名为Example8_1.java,其代码如下。其代码见P159-160。运行结果如下。8.2 线程的使用8.2.1 线程的基本结构2.用实现Runnable接口实现多线程Runnable接口只定义了一个run()方法,该方法是一个抽象方法,所有实现Runnable接口的类都必须具体实现这个方法,为它提供方法体并定义具体操作。Runnable接口中的run()方法与Thread类中的run()方法一样,能被系统自动识别执行。8.2
5、 线程的使用8.2.1 线程的基本结构2.用实现Runnable接口实现多线程(1)创建实现Runnable接口的类ClassName。基本语法格式如下。(2)创建ClassName类的对象。基本语法格式如下。8.2 线程的使用8.2.1 线程的基本结构2.用实现Runnable接口实现多线程(3)用带有Runnable参数的Thread类构造方法创建线程对象,对象RunnableObject作为构造方法的参数,作为新建线程的目标对象为线程提供run()方法。例如,用表8-1中列出的构造方法Thread(Runnable target)创建线程对象。Thread类中除了上述构造方法带有Runn
6、able参数外,还有下面3个构造方法也带有Runnable参数。8.2 线程的使用8.2.1 线程的基本结构2.用实现Runnable接口实现多线程(4)启动定义的线程。基本语法格式如下。与创建Thread类的子类实现多线程相比,通过Runnable接口实现多线程方法为线程的创建提供了更大的灵活性。由于Java语言不允许多重继承,如果采用创建Thread类的子类的方法创建新线程类,则该类不能再继承其他类,这就限制了程序的功能。而后一种方法却没有这方面的顾虑。8.2 线程的使用8.2.1 线程的基本结构2.用实现Runnable接口实现多线程【例8-2】通过实现Runnable接口实现多线程。文
7、件名为Example8_2.java,其代码如下。其代码见P162-163。运行结果如下。我正在工作!我正在休息,喝咖啡!我正在工作!我正在工作!我正在工作!我正在工作!工作顺利完成!8.2 线程的使用8.2.1 线程的基本结构2.用实现Runnable接口实现多线程【例8-2】通过实现Runnable接口实现多线程。文件名为Example8_2.java,其代码如下。其代码见P162-163。运行结果如下。我正在工作!我正在休息,喝咖啡!我正在工作!我正在工作!我正在工作!我正在工作!工作顺利完成!8.2 线程的使用8.2.2 线程的状态及调度每个Java程序都有一个默认的主线程。对于应用程
8、序,主线程是main()方法执行的路径。对于Applet,主线程指挥浏览器加载并执行Java小程序。为实现多线程,必须在主线程中创建新的线程对象。Java线程是通过Java.lang包中的Thread类来实现的。可通过创建一个Thread类的对象来产生一个新的线程。一个线程一旦产生,它就处于生命周期中的某一种状态。线程的状态表示了线程正在进行的活动及能够完成的任务。图8-1描述了线程的生命周期及其状态转换。8.2 线程的使用8.2.2 线程的状态及调度图8-1 线程的生命周期及其状态转换从图8-1中可以看出,在一个线程从创建到消亡的整个生命周期中,总是处于下面5个状态中的某个状态。8.2 线程
9、的使用8.2.2 线程的状态及调度1.新建状态通过new关键字创建一个Thread类或其子类的线程对象时,该线程对象处于新建状态。创建一个新的线程对象可以用下面的语句实现:该语句是最简单的创建线程语句,但该语句创建的线程是一个空的线程对象,系统还未对这个线程分配任何资源。8.2 线程的使用8.2.2 线程的状态及调度2.就绪状态就绪状态又可称为可运行状态。处于新建状态的线程可通过调用start()方法来启动。start()方法产生了线程运行所需要的系统资源。启动后的线程将进入线程就绪队列排队等待CPU服务,此时线程已经具备了运行的条件,一旦获得CPU等资源,线程就可以脱离创建它的主线程而独立运
10、行。3.运行状态当处于就绪状态的线程被调度并获得CPU资源时,线程就进入运行状态。每个线程对象都有一个重要的run()方法,run()方法定义了该线程的操作和功能。当线程对象被调度执行时,它将自动调用其run()方法并从第一条语句开始顺次执行。8.2 线程的使用8.2.2 线程的状态及调度4.阻塞状态阻塞状态又称为不可运行状态。当发生下列情况之一时,线程就进入阻塞状态。(1)等待输入/输出操作完成。(2)线程调用wait()方法等待一个条件变量。(3)调用了该线程的sleep()休眠方法。(4)调用了suspend()悬挂方法。8.2 线程的使用8.2.2 线程的状态及调度5.消亡状态消亡状态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08多线程并发编程电子课件 Java程序设计案例教程 08 多线程 并发 编程 电子 课件 Java 程序设计 案例 教程
限制150内