收藏 分享(赏)

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

上传人:scg750829 文档编号:10071096 上传时间:2019-10-05 格式:PPT 页数:38 大小:1.53MB
下载 相关 举报
第十二章 Java多线程编程.ppt_第1页
第1页 / 共38页
第十二章 Java多线程编程.ppt_第2页
第2页 / 共38页
第十二章 Java多线程编程.ppt_第3页
第3页 / 共38页
第十二章 Java多线程编程.ppt_第4页
第4页 / 共38页
第十二章 Java多线程编程.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、第12讲 线程技术 Java Multi-Threads,计算机与通信学院,本章主要内容,一、线程及多线程的概念,程序(program)是对数据描述与操作的代码的集合,是应用程序执行的脚本。是静态的。,一、线程及多线程的概念,进程(process)是程序的一次完整的执行过程,是操作系统运行程序的基本单位。系统从程序入口开始按语句的顺序(其中包括顺序、分支和循环)完成相应指令直至结尾,从出口退出,同时整个程序结束。是动态的。一个进程既包括其所要执行的指令,也包括了执行指令所需的任何系统资源,如CPU、内存空间、I/O端口等,不同进程所占用的系统资源相对独立。,一、线程及多线程的概念,多任务是指在

2、一个系统中可以同时运行多个程序,即有多个独立运行的任务(多个进程),每一个任务对应一个进程。,例如: 边听音乐边编写Java程序,一、线程及多线程的概念,线程是比进程更小的运行单位,是程序中单个顺序的流控制。每个线程也有它自身的产生、存在和消亡的过程,是一个动态的概念。在执行的任何时刻,只有一个执行点。,一、线程及多线程的概念,多线程(Multi-Threads)多线程是相对于单线程而言的,指的是在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。与多进程不同的是,同类多线程共享一块内存空间和一组系统资源,所以,系统创建多线程花费单价较小。因此,也称线程为轻负荷进程。,例如

3、:在线看电影,播放程序在播放的同时也在下载。,一、线程及多线程的概念,线程与进程的区别 线程并不是一个完整的程序,它自己本身并不能独立运行,只能包含在程序中、只能在进程内部执行。,process,process,一、线程及多线程的概念,线程与进程的区别 多个进程的内部数据和状态都是完全独立的。 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。 属于同一进程的所有线程共享该进程的内存空间和一组系统资源,所以线程之间切换的速度比进程切换要快得多。,二、Java中的线程技术,Java的线程是通过软件包java.lang中定义的类Thread来实现的

4、。当生成一个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中线程

5、的创建,二、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中线程的创

6、建,实现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新建当一个Threa

7、d类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源,并已被初始化。 2就绪处于新建状态的线程被启动后,将进入线程队列排队等待CPU时间片,此时它已经具备了运行的条件,一旦轮到它来享用CPU资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。另外,原来处于阻塞状态的线程被解除阻塞后也将进入就绪状态。,二、线程的状态和生命周期,3运行当就绪状态的线程被调度并获得处理器资源时,便进入运行状态。 run()方法每一个Thread类及其子类的对象都有一个重要的run()方法,当线程对象被调度执行时,它将自动调用本对象的run()方法,从第一句开始顺

8、序执行。run()方法定义了这一类线程的操作和功能。,二、线程的状态和生命周期,4阻塞一个正在执行的线程如果在某些特殊情况下,如被人为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入阻塞状态。阻塞时它不能进入排列队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续执行。,二、线程的状态和生命周期,5死亡处于死亡状态的线程不具有继续运行的能力。线程死亡的原因有两个: 一个是正常运行的线程完成了它的全部工作,即执行完了run()方法的最后一个语句并退出; 另一个是线程被提前强制性地终止,如通过执行sto

9、p()方法或destroy()终止线程。,二、线程调度与优先级,二、线程调度与优先级,调度就是分配CPU资源,确定线程的执行顺序。 Java采用抢占式调度方式,即高优先级线程具有剥夺低优先级线程执行的权力。 如果一个低优先线程正在执行,这时出现一个高优先级线程,那么低优先级线程就只能停止执行,放弃CPU,推回到等待队列中,等待下一轮执行,而让高优先级线程立即执行。 如果线程具有相同的优先级,则按“先来先服务“的原则调度。,二、线程调度与优先级,问题:如果高优先级抢占了低优先级的线程后,一直占据CPU,低优先级的线程如何获得控制权?有两个方法可以改变这种现象: 一是调用sleep()方法,暂时进

10、入睡眠状态,从而让出CPU,使有相同优先级线程和低优先级线程有执行的机会。 二是调用yield()而放弃CPU,这时和它有相同优先级的线程就有执行的机会。,三、多线程并发程序,二、线程组(Thread Group),二、守护线程(Deamon),三、多线程并发程序-线程同步,在多线程的程序中,当多个线程并发执行时,由于线程的相对执行顺序是不确定的。 当多个并发线程需要共享程序的代码区域和数据区域时,由于各线程的执行顺序是不确定的,因此执行的结果就带有不确定性,这就要求线程同步例子:MultiThread.java,三、多线程并发程序-线程同步,临界区和线程同步在多线程程序设计中,我们将程序中那

11、些不能被多个线程并发执行的代码段称为临界区。当某个线程已处于临界区时,其他的线程就不允许再进入临界区 。 实现方法:则是在共享代码之前加入synchronized段,把共享代码包含在synchronized段中,格式如下: synchronized(objectname) statement 其中,objectname用于指出该临界区的监控对象,是可选项; statement为临界区,它既可以是一个方法,称为同步方法,也可以是一段程序代码,称为同步语句块,三、多线程并发程序-线程同步,临界区和线程同步下列语句定义了一个同步方法method1() synchronized int method1() 下列语句定义了一个同步语句块 int method1()synchronized(this),Thats All,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报