1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVA多线程

线程基础 线程与进程 进程(Process)是一个包含自身执行地址的程序,在一个多任务的操作系统中,可以分配CPU时间给每一个进程,CPU在某个时间片中执行某个进程,然后下一个时间片执行另一个进程,由于转换速度很快,使得每个程序好像是在同时进行处理。 线程是进程中的执行流程,是一个程序内部的控制序列流。一个进程中可以同时包含多个线程,也就是说一个程序中同时可能进行多个不同的子流程,每个子流程可以得到一小段程序的执行时间,每执行完一个线程就跳到下一个线程,由于转换速度很快,这使得一个程序可以像是同时处理多个事务。多线程提供了一种把程序划分为若干独立部分的方式。一个线程在执行期间同样有一个开始,一个结束。线程不是程序,它不能独立运行,它必须在程序中执行。 线程和进程的比较 每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。 线程:多个线程可以共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。 多进程:在操作系统中能同时运行多个任务(程序)。比如:QQ聊天工具和千千静听音乐播放器是两个独立的应用程序,如果同时运行它们(用户可以一边听歌,一边聊天),就是多进程。 多线程:在同一应用程序中有多个顺序流同时执行。比如:运行QQ聊天工具时,你可以同时和几个好友聊天,并且还可以通过QQ同时进行文件的传输,这就是多线程。 多线程的作用 程序员只需要编写好每个线程,并让它们独立运行,而不用干预它何时获得CPU时间片或何时获得所需资源。多线程有多种用途,不过通常用法是,你的程序中的某个部分与一个特定的事件或资源联系在一起,而你又不想让这种联系阻碍程序其余部分的运行。这时,可以创建一个与这个事件或资源相关的线程,并且让此线程独立于主程序运行。比如:大家在使用QQ聊天时,可能会通过QQ同时向某个好友传输文件。在传输文件的过程中,你希望可以一边让文件继续传输,一边与好友继续聊天,此时就需要有两个线程同时工作,互不干扰。 线程模型为编程带来了便利,它简化了在单一程序中同时交织在一起的多个操作的处理。在使用线程时,CPU将轮流给每个线程分配其占用时间。每个线程都觉得自己在一直占用CPU,但事实上CPU时间是划分成片段分配给了所有的线程。 基本线程 实现一个线程最简单的做法是从java.lang.Thread类继承,这个类已经具有了创建和运行线程所必要的架构。Thread类最重要的方法是run(),你得重写这个方法,以实现你所要的功能。这样,run()里的代码就能够与程序里的其他线程“同时”执行。 使用Thread类创建多线程的步骤: 要将一段代码在一个新的线程上运行,该代码应该放在Thread类的子类的run()方法中。即:我们要实现多线程,需要编写一个继承了Thread类的子类,在子类中重写run()方法,并且在run()方法中调用想在新线程上运行的程序代码 启动一个新的线程,我们不是直接调用Thread子类对象的run()方法,而是调用Thread子类对象的start()方法(从Thread类继承到的方法)。Thread类对象的start方法将产生一个新的线程,并在该线程上运行该Thread对象中的run方法 由于线程的代码段在run方法中,那么该方法执行完成以后线程也就相应的结束了。因此我们可以通过run方法来控制线程的结束 主线程 当一个程序启动运行时,一个线程就自动产生了,主方法就是在这个线程上运行的。只有一个主线程的程序被称为单线程程序。主线程的作用是启动其他线程和关闭其他线程。 示例【ThreadDemo1】演示了如何获取应用程序中当前主线程对象、在控制台上输出主线程信息及改变主线程名称等操作。 示例【ThreadDemo2】演示了单线程应用程序的执行路径,示例【ThreadDemo3】演示了多线程应用程序的执行路径。通过两个应用程序的对比,我们可以看出单线程应用程序与多线程应用程序的区别。 后台线程(精灵线程或守护线程) 所谓“后台”(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了。反过来来说,只要有任何非后台线程还在运行,程序就不会终止。比如,执行main() 就是一个非后台线程。 可以使用Thread类的setDaemon(true)方法将一个线程标记为后台线程,并且必须在线程启动之前调用setDaemon(true)方法,才能把一个线程设置为后台线程。当正在运行的线程都是守护线程时,Java虚拟机退出和人有生老病死一样,线程也有它完整的生命周期Java自动调度没有逻辑约束的线程,其执行的顺序是没有保障,线程的调度是指按照特定的机制给多个线程分配CPU的使用权。 对于多线

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档