- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10新多线程教程
面向对象的
语言程序设计; 多 线 程;线程的概念;进程与线程
一个被调入内存,并且正在被执行的程序,称为进程,一个进程可以有多个线程。
是两个不同层次上的概念。进程是由操作系统来管理的,而线程则是在一个程序(进程)内。
不同进程的代码、内部数据和状态都是完全独立的,而一个程序内的多线程是共享同一块内存空间和同一组系统资源,有可能互相影响。
; 以前所编写的程序,每个程序都有一个入口、一个出口以及一个顺序执行的序列,在程序执行过程中的任何指定时刻,都只有一个单独的执行点。
事实上,在单个程序内部是可以在同一时刻进行多种运算的,也就是说同时有多个指令序列在执行,这就是所谓的多线程(这与多任务的概念有相似之处)。; 一个单独的线程和顺序程序相似,也有一个入口、一个出口以及一个顺序执行的序列,从概念上说,一个线程是一个程序内部的一个顺序控制流。
线程并不是程序,它自己本身并不能运行,必须在程序中运行。在一个程序中可以实现多个线程,这些线程同时运行,完成不同的功能。;启动5个线程;一个文件; 减轻编写交互频繁、涉及面多的程序的困难(如监听网络端口)。
程序的吞吐量会得到改善(同时监听多种设备,如网络端口、串口、并口以及其他外设)。; 有若干个控制序列,能够同时运行几个独立的动作,提高了应用程序的运行速度。有(多个处理器+多处理器操作系统)的系统,可以并发运行不同的线程。单处理器系统由操作系统按时间片轮转方式和独占方式来分配线程的执行时间(减少CPU的空闲时间),由于CPU的执行速度比较快,看起来就象几个线程在同时运行。
;10.1.2 线程的优先级和分类;10.1.2 线程的优先级和分类; 线程是程序内部的一个顺序控制流,它具有一个特定的生命周期。在一个线程的生命周期中,它总处于某一种状态中。
线程的状态表示了线程正在进行的活动以及在这段时间内线程能完成的任务。
;
; 线程的 5 个状态
1:新建状态 NewBorn
2: 就绪状态 Runnable
3:运行状态 Running
4: 阻塞状态 Blocked
4: 死亡状态 Dead;1.新建状态 (new Thread)
当创建了一个新的线程时( Thread thd = new Thread(); ),它就处于创建状态,此时它仅仅是一个空的线程对象,系统不为它分配资源。处于这种状态时只能启动或终止该线程,调用除这两种以外的其它方法都会失败并且会引起非法状态例外IllegalThreadStateException(对于其它状态,若所调用的方法与状态不符,都会引起非法状态例外)。;2.就绪状态(Runnable)
当线程处于创建状态时,可以调用start()方法( thd.start(); )来启动它,产生运行这个线程所需的系统资源,安排其运行,并调用线程体run()方法,这样就使得该线程处于可运行( Runnable )状态。
;2.就绪状态(Runnable)
需要注意的是这一状态并不是运行中状态(Running ),因为线程也许实际上并未真正运行。由于很多计算机都是单处理器的,所以要在同一时刻运行所有的处于可运行状态的线程是不可能的,Java运行系统必须实现调度来保证这些线程共享处理器。
当一个线程正在运行时,它是可运行的,并且也是当前正运行的线程。;3.运行状态(Running)
线程获得了CPU资源正在执行任务,此时除非它自动放弃CPU资源或者有更高级的线程进入,线程将一直运行到结束。;4.阻塞状态(Blocked)
当下面四种情况发生,线程就进入阻塞状态:
调用了sleep()方法;
调用了suspend()方法;
为等候一个条件变量,线程调用wait()方法;
输入输出流中发生线程阻塞。;4.阻塞状态(Blocked)
对于这四种使得线程处于不可运行状态地情况,都有特定的方法使线程返回可运行状态:
如果线程处于睡眠状态中,sleep()方法中的参数为休息时间,当这个时间过去后,线程即为可运行的;
如果一个线程被挂起,须调用resume()方法来返回;;4.阻塞状态(Blocked)
如果线程在等待条件变量,那么要停止等待的话,需要该条件变量所在的对象调用notify()或notifyAll()方法;
如果在I/O流中发生线程阻塞,则特定的I/O指令将结束这种不可运行状态。
; 需要注意的是每种方法都仅仅对相应的情况才有作用,例如当
文档评论(0)