- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
12_第12章线程解读
目标 线程 多线程:在一个程序中同时运行多个任务 多进程:在操作系统中能同时运行多个任务(程序) 线程和进程的区别: 进程是运行中的应用程序,拥有自己独立的内存空间和资源 一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程 线程是最小的处理单位,多个线程共享一块内存和资源 当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变 线程的优点 充分利用CPU资源 简化编程模型 简化异步事件处理 使GUI更有效率 节约成本 Java线程模型 线程模型: Thread类 Runnable接口 Thread和Runnable区别: Thread是类,具有线程的所有方法,其对象就是一个线程对象。但继承Thread,就不能再继承其他的类(Java只支持单一继承)。 Runnable是接口,只提供run()方法,实现该接口的类还可以继承其他类,但其对象不是线程对象,不能直接运行,必须通过Thread将其启动。 线程使用 创建线程 Thread类 Runnable接口 Runnable接口由单个方法run()组成,它在线程激活时执行。 通过Runnable接口创建线程的步骤如下: 1. 实例化实现Runnable接口的类 2. 建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法 3. 通过Thread类的start()方法建立线程。 线程状态-1 线程状态: born:新线程状态 runnable、running:就绪、运行状态 blocked:阻塞状态 sleeping:休眠状态 waiting:等待状态 dead:死亡状态 线程状态-2 born:新线程状态 当使用new来新建一个线程时,一个新的的线程就诞生了。当对这个线程调用了start()方法,或者这个线程的状态由born改变为runnable后 。 runnable、running:就绪、运行状态 把处理器分配给一个处于runnable的线程之后,这个线程的状态就变成了running。可以通过Thread类的isAlive()方法来判断线程是否处于运行状态。 blocked:阻塞状态 在线程试图执行某个不能立即完成的任务,并且该线程必须等待其他任务完成才能继续时,则该线程进入阻塞状态(blocked)。例如,线程等等输入/输出请求。 sleeping:休眠状态 线程执行过程中,可以通过sleep()方法使线程暂时停止执行,使线程进入sleep状态。sleep()方法的参数是毫秒,并声明了InterruptedException异常。 另外还可以使用suspend()和resume()方法挂起和唤醒线程。 线程状态-3 演示:水平移动按钮 线程优先级 线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定CPU分配时间,优先级高的线程有更大的机会获得CPU时间。 线程的默认优先级值:Thread.NORM_PRIORITY,值为5 每个新线程均继承创建线程的优先级。 setPriority()设置线程优先级,值为MIN_PRIORITY(1)和MAX_PRIORITY(10)之间的值。 getPriority() 获取线程的优先级值。 多线程 就是在一个程序中实现多任务处理,即在主线程中有多个线程在运行,多个线程的执行是并发的。 多线程,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度、同步等问题 。 线程同步 线程同步:保证某个资源在某一时刻只能由一个线程访问,以此保证共享数据及操作的完整性。 同步的关键字synchronized 可以使用synchronized关键字修饰同步方法或同步块 同步方法语法: 同步块语法: 线程通信 线程通信的方法:wait()、notify()和notifyAll() 调用wait()方法可以让线程等待,并释放对象锁,直到interrupt()方法中断它或者另一个线程调用notify()或notifyAll()通知它。wait()方法也可以带一个参数,用于指明等待的时间,使用此种方式不需要notify()或notifyAll()的唤醒。此方法只能在一个同步方法中调用。 调用notify()方法时可以随机选择一个在该对象调用wait()方法的线程,解除它的阻塞。 调用notifyAll()方法可以唤醒等待该对象的所有线程。但唤醒时无法控制唤醒哪个线程,唤醒过程完全由系统来控制。 notify()方法和notifyAll()方法只能在同步方法或同步块内部使用。 死锁 死
您可能关注的文档
最近下载
- 奋达供应商质量体系审核表B1版本+自评模板 (格式可转换)OK.pdf
- 水星船外机二冲程15-25-30 HP E-ETC 2012 英文维修手册.pdf
- 水星船外机二冲程 200-225-250-300 HP 90° V6 2010 英文维修手册.pdf
- 第三章_期权交易结算.pdf VIP
- 十五五规划纲要解读:高端装备制造领跑.pptx
- 微信聊天记录想要恢复原来如此简单!一学就会.pdf VIP
- 《总裁沟通及影响力》--杨台轩详解.ppt VIP
- 最新人教版九年级上册数学期中试题(含答案).docx VIP
- 西门子智能照明办公大楼应用.pdf VIP
- 智能照明系统(西门子InstabusKNXEIB系统)专项施工方案.doc VIP
原创力文档


文档评论(0)