第05章 Java中的多线程

上传人:熏** 文档编号:243151498 上传时间:2024-09-17 格式:PPT 页数:16 大小:44.50KB
返回 下载 相关 举报
第05章 Java中的多线程_第1页
第1页 / 共16页
第05章 Java中的多线程_第2页
第2页 / 共16页
第05章 Java中的多线程_第3页
第3页 / 共16页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第五章,Java,中的多线程,教授:郭磊,【,本章导读,】,多线程是,Java,语言的又一重要特征。线程本身并不是操作系统的一个重要概念,大多数程序设计语言并不提供这种并发机制。,Java,将操作系统的线程概念纳入程序设计语言中,编程人员可利用,Java,提供的多线程机制,使系统同时运行多个执行体,从而加快程序的响应时间,提高计算机资源的使用效率。,本章介绍,Java,的多线程机制,包括线程的概念,线程的创建、线程中的常用方法、线程的同步、守护线程等内容。,【,本章要点,】,线程的概念,线程的创建,线程中的常用方法,线程的同步,守护线程,5.1,线程的概念,在介绍,Java,的线程使用之前,我们要先明确线程的定义。在,Windows,中,我们经常可以一边听音乐,一边和别人在进行,QQ,聊天,同时,杀毒软件和防火墙可能也在同时运行,这个在同一时间内能进行多中,CPU,的资源调配的行为就叫做线程。,5.1,线程是怎样工作的呢?,整个操作系统是由多个进程组成的(包括操作系统进程),而一个进程又由多个线程组成(一般处理单任务的进程只有一个线程);在整个操作系统中占用,CPU,期间,进程分配,CPU,的时间给每一个线程;进程占用整个内存空间的一部分,而线程占有其所属进程占用的内存空间的一部分;进程由代码、数据和运行环境组成,而线程也由这三者组成。,5.1,线程与进程的区别,进程与线程不同之处在于,每个进程都是独立的它仅在分配给它的内存空间中运行,有自己专属的代码和数据,不能访问其他进程的数据(就算另一个进程来自于同一个程序),进程间的通信必须通过操作系统传达,进程有权不接收其他进程(操作系统关键进程除外)发出的消息;而进程允许代码和数据的共享,一个线程可以使用其他线程的代码,也可以访问其他线程的数据(这可能带来数据冲突的问题,也是本章的主要内容之一),使得线程间的通信比进程间的通信更为方便快捷。,5.2,线程的创建,5.2.1,使用,Thread,类的子类创建,一个完整的线程的使用过程分为四个步骤,1,、创建。,顾名思义,当一个线程对象被声明并创建时,他就处于新键的状态。此时,它已经有了相应的内存空间和其他的资源。,2,、运行。,当线程被创建之后,系统并没有给予他生命,他不会自动运行,必须调用,start(),方法来进行激活,使其进入,CPU,的运行等待队列中。(在线程没有结束,run(),方法之前,不要让线程再调用,start(),方法,否则将发生,IllegalThreadStateException,错误)。,5.2,线程的创建,3,、中断。,有,4,种方法可以中断线程。,CPU,资源从当前线程切换给其他线程,使本线程让出,CPU,的使用权处于中断状态,线程使用,CPU,资源期间,执行了,sleep(),方法,使当前线程进入休眠状态。,sleep(),方法是,Thread,类中的一个方法,线程一旦执行了,sleep(),方法,就立即让出,CPU,的使用权,使当前线程处于中断的状态,经过,sleep(),方法中规定的时间,该现成就重新进入线程队列中等待,CPU,资源,以便从中断处继续运行。,线程使用,CPU,资源期间,执行了,wait(),方法,使线程进入等待状态,不会主动的进入线程队列中等待,CPU,资源,当其他的线程调用,notify(),方法通知,才能使的等待状态中的线程重新回到线程队列中,等待,CPU,分配资源。,异常错误,比如是读,/,写操作引起的阻塞。当引发类似问题时,线程不能进入使用队列,当阻塞消除时,线程才重新回到等待队列中。,4,、死亡。,简单的说就是结束了,run(),方法,无论是线程自己执行完毕还是说被强制的结束了,run(),方法。线程就释放了内存。,5.2,线程的创建,5.2.2,使用,Runable,接口创建,在介绍,Runable,接口之前,需要先介绍一下他和,Thread,类的区别:,Thread,类可以在子类中增加新的成员变量,使线程具有某种属性,也可以在子类中新增加方法,使线程具有某种功能。但是,Java,不支持多继承,,Thread,类的子类不能再继承其他的类,因此,在某些需要的情况下,只能采用实现,Runnable,的方式。,5.3,线程中的常用方法,1,、,run,方法,run,方法是运行线程时需要执行的代码。我们要用代码,也就是,run(),方法,来描述一个处理过程,而不是创建一个表示这个处理过程的对象。,2,、,start,方法,线程调用该方法以后将启动线程,从此开始从新建状态进入到等待队列,当,CPU,把资源分配到他的时候,他就开始自己的生命周期了。,3,、,sleep,方法,sleep(),方法指的是一种让线程让出,CPU,资源的方法,他的执行可以暂时停止,CPU,对此线程的资源分配,把这些资源让给别的线程进行使用。,sleep(),方法执行时,线程进入睡眠状态,当,sleep(),所规定的时间结束之后,线程又重新进入等待队列中。,5.3,线程中的常用方法,4,、,isAlive,方法,有时候线程可以处于一个未知的状态。,isAlive,(),方法用来确定一个线程是否还活着。活着的线程不一定正在运行,未在活着的线程也不一定就是死亡的线程,对于一个处于激活状态的线程,他的返回值是,true,。,5,、,currentThread,方法,currentThread,(),方法是,Thread,类中的一个类方法,他可以使用类名进行调用,该方法返回的是当前正在使用,CPU,资源的线程。,6,、,interrupt,方法,关于,interrupt,方法,他总是和,sleep,方法配合使用,在一个线程中,总是,sleep,方法是的这个线程进入睡眠状态,之后在某个时间中,在用,interrupt,方法将其唤醒。,5.4,线程同步,这种多个线程试图同时使用相同且有限的资源的情况,是很有可能发生的,若不是提供某种机制避免这种情况的出现,后果将可能是非常严重且不可预料的,如造成某种线程数据的不一致,使某些线程陷入无限循环永远无法退出,破坏某些文件或者数据库中的重要数据。,5.4,线程同步的处理方法,在处理同步线程的时候,我们经常使用,wait(),、,notifyAll,(),和,notify(),方法来实现同步线程之间的控制,这,3,个方法都是,Object,类中的,final,方法,被所有的类所继承,而且不能被重写。当一个线程使用的同步方法中使用的某个变量需要别的线程来修改的时候,我们就可以用,wait(),方法。它可以中断线程的执行,使他处于等待状态,让,CPU,让出使用资源,当变量被处理之后,在使用,notify(),来唤醒线程,继续执行这个同步线程。,5.5,守护线程,线程分为用户线程和守护线程两种。一般一个线程都是非守护的,非守护的线程也被称为拥护(,user,)线程。,守护线程的特点是:守护线程常常是一个死循环,常常用来监视其他线程的运行,并且提供一些通用性的服务。但是一旦所有的用户线程都运行完毕,那么,守护线程也将被,Java,所结束。,一个线程在被调用前要先设置自己是否是守护线程。设置的方法是:调用,setDaemon(boolean,),方法进行设定,由于一般的线程都默认为非守护的所以在使用的时候,,setDaemon,(),方法都设定为,true,。而由,main(),方法创建的线程都是非守护的线程。,本章小结,本章介绍,Java,中的多线程,其中包括多线程的概念、线程的创建、线程同步、守护线程等多线程的相关知识。通过本章的学习,读者需要掌握多线程的基本知识,能够在多线程的应用领域合理利用本章的知识,使程序能够更好地利用系统资源,同时完成较为复杂的一系列功能。,习 题,一、简答题,1,Java,的线程是如何实现的?,2,线程的生命周期有哪几种状态?,3,Java,中用什么方法来同步数据的访问?,二、编程题,1,计算素数。编写两个线程,一个线程用来计算,2100000,之间的素数及个数,第二个用来计算,100000200000,之间的素数及个数。,2,时钟程序。编写三个线程分别现实各自运行的时间,第一个线程每隔,1,秒钟运行一次,第二个每隔,5,秒钟运行一次,第三个线程每隔,10,秒钟运行一次。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!