- 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-线程
Java线程
线程在游戏和网络程序设计中被广泛应用
基本概念:
1.程序是一段静态代码。它是应用程序执行的蓝本,通常保存在磁盘上。
2.进程是程序的一次动态执行过程,它对应了从代码加载、执行、结束的一个完整过程。
3.线程是比进程更小的执行单位,它是进程中的执行流程。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程都有自身的产生、存在和消亡的过程。
线程的状态和生命周期
一个线程有5种状态:
新建:当一个线程类或其子类的对象被实例化时,新生的线程便处于新建状态,
此时,它已具备了相应的内存和其它资源。
就绪(可运行):处于新建状态的线程被启动后(调用start()方法),便进入线程队列排队等待CPU服务,此时它已经具备了运行条件,一旦拥有CPU资源时,便立即开始其运行状态。
3.运行:当就绪队列的线程被调度并获得处理器资源的状态。此时线程执行run()方法。
4.阻塞:一个正在执行的线程,被中断挂起,让出CPU资源的状态。有4种中断情况:
A .JVM 将CPU资源从当前线程切换到其它线程,使本线程让出CPU的使用权。
B. 线程函数执行了sleep(int millisecond) 方法,使自身进入休眠状态。经过millisecond
毫秒之后,该线程就重新进入队列排队等待CPU资源,以便从中断处继续运行。
C. 线程函数执行了wait() 方法,使自身进入等待状态,从而中断自身运行。这种中断
必须借助于其它线程(本线程外部)调用notify()方法通知该线程重新进入队列
排队等待CPU资源,以便从中断处继续运行。
D. 线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起
阻塞。这种中断只有当引起阻塞的原因消失才能够从中断处继续执行。
5.死亡:线程已完成生命周期,不再具有继续运行的能力。其原因有二:一是正常运行的
线程完成全部工作,另一个是线程被强制性终止。
说明:
线程在某一时刻总是处于一个确定的状态中,但是,只能区分该线程是否存活。
新建和死亡状态为非存活状态。而Runnable,Running,Blocked状态为存活状态。,
阻塞事件的产生以及消除阻塞的方法
2.1. 调用sleep()方法进入休眠产生阻塞,休眠时间到阻塞自动解除
2.2. 执行I/O阻塞操作产生阻塞,I/O 操作完成,阻塞自动解除
2.3. 线程A欲获得一个锁,但该锁被其它线程持有,使A阻赛等待,在这种情况下,通常由两种解除阻塞的方法:A. 其它线程释放锁;B 线程设置了等待并超时。
2.4. 线程等待某个条件满足产生阻塞(await/wait),在这种情况下,通常有两种解
除阻塞的方法:A.其它线程对条件作了修改,并发起信号给等待该条件的线程;
await对应的通知方法为signal()或signalAll(),而wait对应的通知方法为notify()
或notifyAll(); B. 线程设置了等待并超时。
2.5. 线程被调用suspend()方法挂起产生阻塞,调用resume()方法使其恢复。(sun 已不建议使用了!)
三.线程调度与优先级:
处于就绪状态的线程首先进入就绪队列排队等候处理器资源,同一时刻处于就绪队列中的线程可能有多个,Java虚拟机中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别。多线程系统给每个线程自动分配一个优先级,任务较急的线程,分配较高的优先级,优先获得处理器资源,反之,较低优先级的线程要等到较高优先级的线程执行完毕,才能获得处理器资源。
1.Thread优先级常量
Thread.MIN_PRIORITY 最低优先级;
Thread.MAX_PRIORITY 最高优先级;
所有线程的优先级都介于这两个常数之间。
线程优先级
2.1. 设置优先级
setPriority(int grade) grade必须 介于1—10之间,否则将产生
IllegalArgumentException 异常。缺省的优先级为5.
2.2. 获得优先级
int getPriority() .
说明:
线程的优先级与操作系统有关,有的操作系统只能识别3个优先级别。
四.创建线程
Java线程也是一种对象,但只有实现了Runnable接口的类的对象才有资格成为线程。
有两种创建线程的方法:一个类实现Runnable接口;一个类从Thread类派生(因为该类实现了Runnable接口).,并覆盖(改写)run()方法
1.Runnable接口
interface Runnable{
void run(); 接口方法,这是线程对象必须执行的方法!它规定线程完成的实际操作
}
2创建线程的方法:
2.1. 如果类从Thread类继
您可能关注的文档
最近下载
- (高清版)B-T 2099.1-2021 家用和类似用途插头插座 第1部分:通用要求.pdf VIP
- 劳动创造美好生活中职生劳动教育全套教学课件.pptx
- 人工智能在高中美术课堂中的应用.pdf
- 西藏自治区日喀则市高一入学数学分班考试真题含答案.docx VIP
- 2025黑龙江省建设投资集团有限公司面向系统内部及社会招聘12人笔试备考试题及答案解析.docx VIP
- 医院医德医风考评公示制度医德医风考评制度及考评实施细则.docx
- 晶体工程资料.pdf VIP
- 成都川师锦华小升初入学分班考试英语考试试题及答案.docx VIP
- 第六章晶体工程.ppt VIP
- ASUS华硕ROG SWIFT PG65UQ中文说明书.pdf VIP
文档评论(0)