- 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语言基础教程(张化祥):第九章多线程
第9章 多线程 9.1线程简介 9.2 线程的管理 9.3 线程优先级 9.1线程简介 多线程的主要优势是可以编写出非常高效的程序,因为它会让利用大多数程序出现的空闲时间,通过使用多线程,程序可以在这些空闲时间执行其他任务。 9.1线程简介 一个线程可以有以下几种状态: 新建状态:是一个新线程刚刚建立,但还未将它送入就绪队列时的状态。 运行状态:调度程序选择该线程并分配CPU的运行权限。 就绪状态:在此状态下,只要调度程序获得CPU的运行权限,线程就可以运行。 挂起状态:线程在运行期间,由于某种原因,线程交出CPU运行权限,暂时中止线程的运行。 阻塞状态:当线程处于阻塞状态时,调度机制将忽略该线程,不会分配给该线程任何CPU运行权限。 终止状态:当一个线程已经正常结束或者异常结束,进城调度程序将他从就绪队列调出,但尚未将他撤销时的状态。 9.1线程简介 下面是Thread类常用的几个方法: final String getName():获取当前的线程名称; final int getPriority():获取当前线程的优先级; final boolean isAlive():确定线程是否运行; final void join():等待线程终止; void run():线程的进入点; void start():通过调用线程的run()方法启动线程。 9.2 线程的管理 一个线程从开始到被垃圾回收器回收,首先要创建一个线程,在创建线程中,要对线程进行初始化,设置线程的终止方法。进而,线程开始执行。在执行过程中,线程有可能因为未获得足够的资源而被阻塞,也有可能因出现异常而被中断,也可能因为设置了休眠时间,而暂时停止运行。最后线程完成任务,被中止。在线程执行的过程中,因为多个线程之间要进行协调,所以线程之间的通信机制是必不可少的。否则,将会出现死锁问题。 9.2.1 线程的创建 创建线程最简单的方法是从java.lang.Thread继承,或者实现Runnable接口。 run()方法是为程序中的并发执行的线程建立进入点。使用继承的方式,需要覆盖run()方法,以实现所需要的功能,而runnable接口抽象了一个可执行代码单元,其中定义了run()方法,声明为: public void run() 程序9.1:testThread .java class testThread extends Thread{ //用从Thread类继 //承的方式实现testThread private int threadCount; private String threadName; testThread(String threadName){ this.threadName=threadName; threadCount=0; start();//调用run(); } 程序9.1:testThread .java public void run(){ //线程在此开始执行 System.out.println(threadName+开始); try{ while(threadCount5){ Thread.sleep(500); System.out.println(threadName+:+ threadCount); threadCount++; } }catch(InterruptedException e){ System.out.println(threadName+被中断); } System.out.println(threadName+已完成); } 程序9.1:testThread .java public static void main(String[] args){ for (int i=0;i5;i++) new testThread(线程+i);//创建运行对象,并对每个线程命名; } } 以下为输出结果: 线程0开始 线程1开始 线程2开始 线程3开始 线程4开始 线程0:0 线程1:0 线程2:0 线程3:0 线程4:0 线程0:1 线程1:1 线程2:1
文档评论(0)