- 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 SE 第九讲 - 并发编程
Java SE 第九讲 并发编程 概述 把一个问题切分成多个可独立运行的部分,从而提高程序的响应能力。 在程序中,这些彼此独立运行的部分称之为线程(thread) JVM允许应用程序并发运行多个线程 创建可执行线程 创建一个新的可执行线程有两种方式 一种是创建java.lang.Thread类的子类,这个子类应该覆写(override)Thread类的run()方法,这样,子类的实例通过调用start()方法执行线程,JVM调用run()方法,结果是两个线程并发运行:当前主线程(start()方法返回的线程)和另一个执行run()方法的线程。 另外一种创建线程的方式是实现java.lang.Runnable接口,实现类必须实现run()方法。当创建并运行线程时,实现类的实例作为参数传递给Thread类的构造函数,然后调用Thread类的start()方法 。 TestRunnable TestThread 启动线程 直接调用run()方法而不是start()方法将作为一个普通的方法允许,但不能开启一个新的线程。 多次启动一个线程是非法的,一个线程在完全执行完毕前不能重新启动。 线程的调度 让步(yield),你的工作已经做得差不多了,可以让别的线程使用处理器了。不过这只是一个暗示,没有任何机制保证它将会被采纳。一般来说yield()方法并不常用。 休眠(sleep),使线程停止执行一段时间,该时间由你给定的毫秒数决定 。 线程的调度 优先权(priority),能告诉调度程序当前线程的重要性如何 。 加入到某个线程(join),一个线程可以在其它线程之上调用join( )方法,其效果是等待一段时间直到第二个线程结束才继续执行。如果某个线程在另一个线程t上调用t.join( ),此线程将被挂起,直到目标线程t结束才恢复 。 同步 锁定任何对象所占用的内存,使得同一时刻只能有一个线程在使用它。这是通过 synchronized 关键字来实现的 。 同步 同步方法(普通方法、静态方法) public synchronized void oper() { //在当前对象上加锁,同一时刻只能有一个线程访问当前对象的此方法 } public static synchronized void oper() { //在Class对象上加锁,同一时刻只能有一个线程访问此静态方法 } 同步 同步控制块(Synchronized Block) synchronized(syncObject) { //在对象syncObject上加锁,同一时刻只能有一个线程访问 } 死锁问题 如果有多个线程会同时竟争多个共享资源,并且加锁的顺序不固定,那就有可能出现死锁。 程序有死锁的潜在bug,比较难调试出来,所以得小心 线程间的协作 线程可以在已经持有其锁的对象上调用wait()方法(有多个重载的方法),从而自动释放持有的锁,然后进入此对象的等待区休眠。 线程一旦在某个对象的等待区休眠了,如果休眠时间未到,那么必须有其它线程在此对象上调用notify()方法或notifyAll()方法,线程接受到通报后才回醒过来从新竞争对象的锁。 线程可以在已经持有其锁的对象上调用notifyAll()方法唤醒所有在此对象的等待区休眠的线程。 线程可以在已经持有其锁的对象上调用notify()方法在此对象的等待区休眠的某个线程(到底唤醒谁是不确定的)。 线程间的协作 通过调用wait()方法让某个线程休眠和通过调用notify()方法或nofifyAll()方法唤醒某些线程的方式称为等待-唤醒机制。 使用等待-唤醒机制往往比调用sleep()方法的轮询机制效果好,能合理利用CPU资源。 注意,要在某个对象上调用wait(),notify()和notifyAll方法,必须是调用线程已经给此对象加了锁,否则会抛出IllegalMonitorStateException 。 使用多线程带来的优势 利用多线程,能够最大限度的利用CPU,因为空闲的时间被限制在最小,这在Java操作的交互网络环境下显得非常重要,因为此时空闲时间(比如进行IO处理时)是普遍存在的. 在传统的单线程环境下,程序必须等待这些任务都执行完才能进行下一个任务,而任由CPU在大多数时候是空闲的.如果使用多线程,就可以利用空闲时间了. 尤其是随着硬件的发展,多CPU,甚至是多核CPU的硬件系统已经普及,我们使用Java提供的多线程机制就可以快速方便的编写多线程的应用程序,从而充分利用硬件资源,提供系统的吞吐率. Thank You! QA Time * Process and Portfolio Management ? 2005 IBM Corporation Copyright? 2008 - 2
您可能关注的文档
- Anttnff2008年园林及仿古建筑工程造价员模拟试2008.3.27卷.doc
- AP200ap300使用说明2003.doc
- Alzheimer’s Disease Prevention Initiative.ppt
- apache2的worker工作模式配置及MaxClients不足问题解决.doc
- AralditeAW2104-HW2934,金钱胶,爱牢达AB胶.pdf
- ARDEX STS8 超强抗张力瓷砖粘结剂施工工艺及安全施工措施.doc
- ARP请求详解.doc
- ARTIS-3维护保养规程.doc
- AS-MF09 灭火机器人套件安装指南V1.0.pdf
- ASIC对二三层处理理和三层数据流过程.pdf
文档评论(0)