- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Java多线程
主讲人:华清远见
线程创建线程的生命周期线程的优先级线程的控制线程同步线程概述线程通信死锁
线程概述线程是独立调度和分派的基本单位,多线程有助于提高程序的执行吞吐率,从而提高程序的执行效率。在面向线程设计的系统(如当代多数操作系统、Linux2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或异步(平行)的方式独立运行。
线程的创建Java提供了线程类Thread来创建多线程。其实创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方式:继承Thread类 需要从java.lang.Thread类继承一个子类,重载它的run方法。实现Runnalbe接口 需要从java.lang.Runnable接口实现一个类,重载它的run方法。在Java中类仅支持单继承。也就是说,当定义一个新的类的时候,它只能继承一个父类。如果创建的自定义线程类是通过继承Thread类的方式实现的,那么这个自定义类就不能再去继承其他的类,也就无法实现更加复杂的功能。如果自定义类在实现线程功能的同时还必须继承其他的类,那么就可以使用实现Runnable接口的方式来定义该类为线程类,从而避免Java单继承所带来的局限性。最重要的一点是使用Runnable接口的方式创建的线程可以处理同一资源,从而实现资源的共享。当然,继承Thread类这种方式也有其优势,例如可以使代码更加简洁等。实际的开发中要根据具体场景来选用采取何种方式。
线程的生命周期
线程的优先级多线程应用程序的每一个线程的重要性与优先级都可能不同,例如有多个线程都在等待获得CPU的时间片,那么优先级高的线程抢占CPU并得以执行的概率就会更高。当多个线程交替抢占CPU时,优先级高的线程占用的时间也多。因此,高优先级的线程执行的效率和速度都会提升。在Java中,CPU的使用模式通常是抢占式调度模式。抢占式调度模式是指许多线程同时处于可运行状态,但只有一个线程正在运行。当线程运行结束,或者进入不可运行状态,或者具有更高优先级的线程变为可运行状态,它将会让出CPU。线程与优先级相关的方法如下。publicfinalvoidsetPriority(intnewPriority)
线程的启动Java是面向对象的程序设计语言,其重点是类的设计与实现。Java利用线程类Thread来创建线程,通过线程类的构造方法创建一个线程对象,并调用其start方法启动该线程。实际上,启动线程的目的就是为了执行它的run方法,而Thread类中默认的run方法没有任何业务逻辑代码,所以用Thread类创建的线程能完成任何任务。为了让创建的线程完成特定的任务,必须重新定义run方法。
线程的挂起当线程启动后,可以调用sleep与wait方法使线程进入等待状态,进入等待状态的线程将会被挂起,挂起的线程CPU不会再给其分配资源,挂起和睡眠是主动的,挂起恢复需要主动完成,睡眠恢复则是自动完成的,因为睡眠有一个睡眠时间,睡眠时间到达,线程则恢复到可运行态。
线程状态检查Java中没有提供判断线程状态的方法,如果需要判断当前线程是否执行完毕,必须在线程中添加一个布尔类型的数据作为标志位。当线程执行完毕后,改变标志位的值来标记线程执行完成。在进行判断线程状态时只需要查询标志位的值即可判断当前线程是否执行完毕。
结束线程Thread类提供了一个stop方法,但是stop方法是一个被废弃的方法。因为stop方法过于暴力,会强行把执行一半的线程终止,这样就无法保证线程的资源能够正常释放。可以通过设定标志位等更加“温柔”的方式让线程正常结束,在white循环中定义一个标志位isRunning,用于指示线程是否需要退出。当需要停止线程时,isRunning就会被赋值为false,此时while循环终止并执行线程回收资源相关代码后线程安全结束。
后台线程有一种线程是在后台运行的,它的任务是为其他线程提供服务,这种线程被称为后台线程(DemonThread),又称为守护线程或精灵线程。JVM的垃圾回收线程就是典型的后台线程。如果所有的前台线程都死亡,后台线程会自动死亡。调用Thread对象的setDaemon(true)方法可将指定线程设置成后台线程,主线程和子线程默认都是前台线程,但并不是所有的线程默认都是前台线程,有些线程默认就是后台线程。另外,前台线程创建的子线程默认是前台线程,后台线程创建的子线程默认就是后台线程。
线程的同步多线程可以共享资源(文件、数据库、
您可能关注的文档
- 消费心理学_白玉苓_全套PPT教学课件.pptx
- 新媒体运营(慕课版)全套课件(可编辑).pptx
- 新媒体运营全套课件(可编辑).pptx
- 信创桌面操作系统的配置与管理(统信UOS版)全套PPT课件.pptx
- 信息技术(基础模块)全套PPT课件.pptx
- 学前儿童美术教育全套课件(可编辑).pptx
- 银行基本技能(第2版)胡增芳全套PPT课件.pptx
- 应用写作(第四版)张耀辉全套PPT课件.pptx
- 幼儿游戏活动设计与案例(视频指导版)全套课件(可编辑).pptx
- 云计算与大数据技术张冰峰全套PPT课件.pptx
- 2026西藏银行校园招聘12人历年参考题库及答案解析(名师系列).docx
- 2026浙江嘉兴市妇幼保健院招聘高层次人才48人参考题库(第一批)附答案解析.docx
- 2026河南农商银行系统校园招聘1736人历年参考试题附答案解析.docx
- 2026招商银行杭州分行校园招聘备考试题附答案解析.docx
- 2026江苏南京地铁集团系列校园招聘参考题库(二)及答案解析(名师系列).docx
- 2026潮州农商银行秋季校园招聘备考试题附答案解析.docx
- 2026福建省面向西南财经选调生选拔笔试试题及答案解析(名师系列).docx
- 三湘教育联盟2024年高三第一次模拟考试语文试卷含解析.doc
- 南京航空航天大学金城学院《英语语音》2021-2022学年第一学期期末试卷.doc
- 独山县2025年数学四下期末学业水平测试模拟试题含解析.doc
原创力文档


文档评论(0)