版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【本章导读】多线程是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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 豪华住宅租赁合同三篇
- 江西省鹰潭市(2024年-2025年小学五年级语文)统编版小升初模拟(上学期)试卷及答案
- 2024年抗精神病药品项目发展计划
- 辽宁省盘锦市(2024年-2025年小学五年级语文)人教版随堂测试(下学期)试卷及答案
- 浙江省衢州市(2024年-2025年小学五年级语文)统编版竞赛题((上下)学期)试卷及答案
- 无线安装合同范本
- 卫生间防水施工方案的技术要点
- 老旧小区改造项目资金使用方案
- 海上光伏电站并网调试方案
- 学校宿舍洗衣服务方案
- 松下电器(中国)焊接学校——焊接技术
- 《肺动脉高压护理》PPT课件.ppt
- 青少年特发性脊柱侧弯症中医诊疗方案4
- 研发系统积分考核管理办法
- 河堤工程岩土工程勘察报告
- 完整版水稳自评报告
- 《小儿推拿》PPT课件(完整版)
- 幼儿园区域材料投放明细(修改版)
- 人教版五年级上册《练习十七》数学教案_1
- 浅谈汽车智能化焊装生产线的安装与调试
- 顶管穿越铁路施工技术措施
评论
0/150
提交评论