• / 38
  • 下载费用:10 金币  

第十二章 Java多线程编程.ppt

关 键 词:
第十二章 Java多线程编程.ppt
资源描述:
第12讲 线程技术 Java Multi-Threads,计算机与通信学院,本章主要内容,,一、线程及多线程的概念,,程序(program)是对数据描述与操作的代码的集合,是应用程序执行的脚本。是静态的。,一、线程及多线程的概念,,进程(process)是程序的一次完整的执行过程,是操作系统运行程序的基本单位。系统从程序入口开始按语句的顺序(其中包括顺序、分支和循环)完成相应指令直至结尾,从出口退出,同时整个程序结束。是动态的。一个进程既包括其所要执行的指令,也包括了执行指令所需的任何系统资源,如CPU、内存空间、I/O端口等,不同进程所占用的系统资源相对独立。,一、线程及多线程的概念,,多任务是指在一个系统中可以同时运行多个程序,即有多个独立运行的任务(多个进程),每一个任务对应一个进程。,例如: 边听音乐边编写Java程序,一、线程及多线程的概念,,线程是比进程更小的运行单位,是程序中单个顺序的流控制。每个线程也有它自身的产生、存在和消亡的过程,是一个动态的概念。在执行的任何时刻,只有一个执行点。,一、线程及多线程的概念,,多线程(Multi-Threads)多线程是相对于单线程而言的,指的是在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。与多进程不同的是,同类多线程共享一块内存空间和一组系统资源,所以,系统创建多线程花费单价较小。因此,也称线程为轻负荷进程。,例如:在线看电影,播放程序在播放的同时也在下载。,一、线程及多线程的概念,,线程与进程的区别 线程并不是一个完整的程序,它自己本身并不能独立运行,只能包含在程序中、只能在进程内部执行。,process,process,一、线程及多线程的概念,,线程与进程的区别 多个进程的内部数据和状态都是完全独立的。 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。 属于同一进程的所有线程共享该进程的内存空间和一组系统资源,所以线程之间切换的速度比进程切换要快得多。,二、Java中的线程技术,,Java的线程是通过软件包java.lang中定义的类Thread来实现的。当生成一个Thread类的对象之后,就产生了一个线程,通过该对象,可以启动线程、终止线程、或者暂时挂起线程等。,二、Java中的线程技术,,Thread在Java包中的层次关系:所有已实现的接口:Runnable Thread类的原型:public class Thread extends Object implements Runnable{},二、Java中的线程技术,,Runnable接口:java.lang.RunnableRunnable的原型:public interface Runnable {void run();},二、Java中线程的创建,,,二、Java中线程的创建,,,二、Java中线程的创建,,,二、Java中线程的创建,,,二、Java中线程的创建,,通过扩展Thread类创建线程-方法一 1.创建Thread类的子类。 2.重写Thread类中的run()方法。 3.创建子类的对象。 4.调用线程对象的start()方法。例子.ThreadTest.java,二、Java中线程的创建,,通过扩展Thread类创建线程-方法一 1.创建Thread类的子类。 2.重写Thread类中的run()方法。 3.创建子类的对象。 4.调用线程对象的start()方法。例子.ThreadTest.java,二、Java中线程的创建,,例子.ThreadTest.java,二、Java中线程的创建,,实现Runnable接口创建线程-方法二 1.创建实现接口Runnable的类。 2.实现接口Runnable中的run()方法。 3.创建实现了Runnable接口的类对象。 4.将3中创建的对象作为参数,创建Thread类对象。 5.调用线程对象的start()方法。例子.AppletThreadTest.java,二、Java中线程的创建,,,二、Java中线程的创建,,例子.RunnableThreadTest.java,二、线程的状态和生命周期,,,线程的状态,二、线程的状态和生命周期,,,线程的生命周期 1.新建 2.就绪 3.运行 4.阻塞 5.死亡,二、线程的状态和生命周期,,,1.新建当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源,并已被初始化。 2.就绪处于新建状态的线程被启动后,将进入线程队列排队等待CPU时间片,此时它已经具备了运行的条件,一旦轮到它来享用CPU资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。另外,原来处于阻塞状态的线程被解除阻塞后也将进入就绪状态。,二、线程的状态和生命周期,,,3.运行当就绪状态的线程被调度并获得处理器资源时,便进入运行状态。 run()方法每一个Thread类及其子类的对象都有一个重要的run()方法,当线程对象被调度执行时,它将自动调用本对象的run()方法,从第一句开始顺序执行。run()方法定义了这一类线程的操作和功能。,二、线程的状态和生命周期,,,4.阻塞一个正在执行的线程如果在某些特殊情况下,如被人为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入阻塞状态。阻塞时它不能进入排列队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续执行。,二、线程的状态和生命周期,,,5.死亡处于死亡状态的线程不具有继续运行的能力。线程死亡的原因有两个: 一个是正常运行的线程完成了它的全部工作,即执行完了run()方法的最后一个语句并退出; 另一个是线程被提前强制性地终止,如通过执行stop()方法或destroy()终止线程。,二、线程调度与优先级,,,,二、线程调度与优先级,,,调度就是分配CPU资源,确定线程的执行顺序。 Java采用抢占式调度方式,即高优先级线程具有剥夺低优先级线程执行的权力。 如果一个低优先线程正在执行,这时出现一个高优先级线程,那么低优先级线程就只能停止执行,放弃CPU,推回到等待队列中,等待下一轮执行,而让高优先级线程立即执行。 如果线程具有相同的优先级,则按“先来先服务“的原则调度。,二、线程调度与优先级,,,问题:如果高优先级抢占了低优先级的线程后,一直占据CPU,低优先级的线程如何获得控制权?有两个方法可以改变这种现象: 一是调用sleep()方法,暂时进入睡眠状态,从而让出CPU,使有相同优先级线程和低优先级线程有执行的机会。 二是调用yield()而放弃CPU,这时和它有相同优先级的线程就有执行的机会。,三、多线程并发程序,,二、线程组(Thread Group),,,,二、守护线程(Deamon),,,,三、多线程并发程序-线程同步,在多线程的程序中,当多个线程并发执行时,由于线程的相对执行顺序是不确定的。 当多个并发线程需要共享程序的代码区域和数据区域时,由于各线程的执行顺序是不确定的,因此执行的结果就带有不确定性,这就要求线程同步例子:MultiThread.java,,三、多线程并发程序-线程同步,临界区和线程同步在多线程程序设计中,我们将程序中那些不能被多个线程并发执行的代码段称为临界区。当某个线程已处于临界区时,其他的线程就不允许再进入临界区 。 实现方法:则是在共享代码之前加入synchronized段,把共享代码包含在synchronized段中,格式如下: synchronized[(objectname)] statement 其中,objectname用于指出该临界区的监控对象,是可选项; statement为临界区,它既可以是一个方法,称为同步方法,也可以是一段程序代码,称为同步语句块,,三、多线程并发程序-线程同步,临界区和线程同步下列语句定义了一个同步方法method1() synchronized int method1(){ …… }下列语句定义了一个同步语句块 int method1(){synchronized(this){……}},,That’s All,
展开阅读全文
  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:第十二章 Java多线程编程.ppt
链接地址:https://www.weizhuannet.com/p-10071096.html
微传网是一个办公文档、学习资料下载的在线文档分享平台!

网站资源均来自网络,如有侵权,请联系客服删除!

 网站客服QQ:80879498  会员QQ群:727456886

copyright@ 2018-2028 微传网络工作室版权所有

     经营许可证编号:冀ICP备18006529号-1 ,公安局备案号:13028102000124

收起
展开