[IT资料文档]第十一章 多线程2003.pptVIP

[IT资料文档]第十一章 多线程2003.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 8.2 lock java.util.concurrent.locks里提供最基本的接口lock以及几个Lock接口的实现类,比较常用的是ReentrantLock。 synchronized和java.util.concurrent.locks.Lock的异同 Lock能完成synchronized所实现的所有功能 synchronized会自动释放锁,而Lock提供了灵活的锁定机制,一定要求程序员手工释放,并且必须在finally语句中释放,以及提供了尝试获得锁(tryLock())。 * 使用Lock时需要自己获得锁并在使用后手动释放,通常Lock的使用方式如下: Lock?l?=?...;? ?? l.lock(); ?? try?{ ?? ????//?执行操作 ?? }?finally?{ ?? ????l.unlock(); ?? }?? * 如果锁不能确定能马上使用或者在timeout超时时间前使用,可以使用trylock()进行处理。 try { Lock?l?=?...;? ??l.trylock(); ……//执行操作 } finally?{ ?? ??? ?l.unlock(); } } * Lock往往与Conditon结合使用,前者代替了synchronized,而后者则代替了Object对象上的wait()、notify()和notifyAll()方法(Condition中提供了await()、signal()和signalAll()方法)。 通过Lock.newCondition()方法能够创建与Lock绑定的Condition实例。 * 8.3 线程池(thread pool) 一般的服务器都需要线程池,比如Web、FTP等服务器 ,不过它们一般都自己实现了线程池,比如Tomcat 。 线程池常见类型为固定线程池fixed thread pool,池中总包含数量固定的正在运行的线程。 * 创建线程池方式,通常通过java.util.concurrent.Executors能够获得多种线程池的实例 java.util.concurrent.Executors中的newFixedThreadpool,获得固定大小线程池 newSingleThreadExecutor,获得单线程 另外,其他Executor也可提供创建线程池 java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ScheduledThreadPoolExecutor * 线程的优先级 每个Java线程都有一个优先级,其范围都在1和10之间。默认情况下,每个线程的优先级都设置为5 在线程A运行过程中创建的新的线程对象B,初始状态具有和线程A相同的优先级 可在线程创建之后的任何时候,通过setPriority(int priority)方法改变其原来的优先级 * 基于线程优先级的线程调度 具有较高优先级的线程比优先级较低的线程优先执行 对具有相同优先级的线程,Java的处理是随机的 * 5、线程的常用方法 (1) yield() 当前线程如果完成了所需的工作,可以暗示调度机制让别的线程使用CPU了(这个暗示不一定保证被采用) (2) setPriority(int priority)可以设定线程的优先级。 * (3) Sleep() 使当前线程的执行挂起一段指定的时间,把cpu时间让给其他线程。时间可以由豪秒数或纳秒数决定。 注意:使用sleep()时必须把它放在try块中,或抛出InterrruptedException异常,这是因为sleep有可能会在休眠时间到期前被中断。一旦接收到中断,立刻取消睡眠返回。 * class Coffee extends Thread { public void run(){ for(int i=0; i10; i++) { System.out.println(I like coffee); try { sleep(2); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } * (4) interrrupt() 当前线程终止正在进行的工作去进行其它工作。 通常用于终止处于sleep,wait或join状态的线程,抛出InterruptedException。 如果一个线程长时间没有抛出Interrupte

文档评论(0)

msb + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8134116003000000

1亿VIP精品文档

相关文档