- 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面向对象程序设计第7章_Java多线程机制
例1:不提倡使用优先级 7.2.1 继承Thread类创建线程 7.2.4 两种创建线程方法比较 实现Runnable接口的优势: 符合OO设计的思想。 便于用extends继承其它类。 采用继承Thread类方法的优点:程序代码更简单 不能再继承其他的类 通过Thread实例的start(),一个Thread的实例只能产生一个线程,因此不能共享同一个目标对象 Runnable的实例并不能直接运行,它需要被Thread对象来包装才行运行 ,但同一实例(Runnable实例)可产生多个线程 例5:两种创建线程方法比较 class MyThread extends Thread{ public int x = 0; public void run(){ System.out.println(++x); } } class R implements Runnable{ private int x = 0; public void run(){ System.out.println(++x); } } 例5:两种创建线程方法比较(续) 7.3 线程的常用方法 start():使线程从新建状态进入就绪状态 run():系统自动调用,用户必须重写 sleep() isAlive() currentThread() interrupt() join() setDaemon() isDaemon() 7.3.1 sleep()方法 该方法用来使一个线程暂停运行一段固定的时间 在线程睡眠时间内,将运行别的线程 sleep() 结束后,线程将进入就绪(Runnable)状态 sleep()方法的格式有以下两种: static void sleep(int mills) throws InterruptedException //休眠时间以ms为单位 static void sleep(long millis, int nanos) throws InterruptedException //休眠时间,指毫秒数与纳秒数之和 例6:每隔一秒钟打印一个数字到屏幕 7.3.2 isAlive()方法 当线程的状态未知时,用isAlive()确定线程是否活着。 返回true 意味着线程已经启动,但还没有运行结束 其它状态下,isAlive()返回false 7.3.3 currentThread( )方法 Thread 类的静态方法currentThread( )返回当前线程,可以用类名调用 当前线程,即占用CPU资源的线程 7.3.4 interrupt()方法 如果一个线程 t 在调用sleep()、join()、wait()等方法被阻塞时,则t.interrupt()方法将中断t的阻塞状态,使t 重新排队等待CPU资源 并将发生InterruptException异常对象 P375,例15.7 7.3.5 join()方法 tb.join( )方法使当前的线程ta等待,直到 tb结束为止,线程ta恢复到运行(runnable)状态 有三种调用格式: join():如当前线程发出调用t.join(),则当前线程将等待线程 t结束后在继续执行。 join(long millis):如当前线程发出调用t.join(),则当前线程将等待线程t结束或最多等待mills毫秒后在继续执行。 join(long millis,long nanos) throws InterruptedException 7.3.6 isDaemon()和setDaemon() 线程可分为守护线程与用户线程 守护(Daemon)线程是指在程序运行的时候在后台提供一种通用服务的线程,并不是程序运行不可或缺的部分。当非守护线程结束时,程序立即终止,不必执行没有结束的非守护线程 setDaemon(true)设置线程为守护线程,setDaemon需要在start之前使用(P390) isDaemon()返回线程是否为守护线程 P390,例15.15 7.4 线程同步 多个线程在并发地运行时可能共用资源,带来了访问冲突问题 多个线程并发执行时,线程的相对执行顺序是不确定的 多线程对共享数据操作时,这种线程运行顺序的不确定性将会产生执行结果的不确定性,使共享数据的一致性被破坏
文档评论(0)