《Java教程多线程》.docVIP

  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文档。上传文档
查看更多
《Java教程多线程》.doc

第5章 多线程 5.1 如何创建与理解线程 (进程上下文),在两个文件拷贝进程间切换需要额外的开销,反而比先执行完C 盘向D盘的拷贝,再启动E盘向F盘的拷贝慢。 5.1.1 了解线程概念 5.1.2 用Thread类创建线程 Javajava.lang.Thread类来控制的,一个Thread类的对象代表一个线程,而且只能代表一个线程,通过Thread类和它定义的对象,我们可以获得当前线程对象、获取某一线程的名称,可以实现控制线程暂停一段时间等功能,关于Thread类的具体应用与讲解,我们将在文中稍后的地方逐步涉及,在学完本章后,大家也需通读一下JDK文档中有关Thread类的方法及说明,并动手编写一些小程序对其中的某些方法测试验证一下,以便对Thread类有更全面的了解与认识。下面,我们就开始通过程序来详细讲解吧! 程序清单:ThreadDemo1.java public class ThreadDemo1 { public static void main(String args[]) { new TestThread().run(); while(true) { System.out.println(main thread is running); } } } class TestThread { public void run() { while(true) { System.out.println(Thread.currentThread().getName() +  is running); } } }我们使用Thread.currentThread()main thread is running,这说明代码块1处的程序没有运行,因为代码块2先于代码块1运行,且代码块2为无限循环,代码块1永远没有机会运行。同时,我们也能够看到当前线程的名称为main。 我们将代码进行如下修改(为了达到对比讲解,保持上下连贯性的效果,我们对修改过的地方进行注释,而不是彻底删除掉): 程序清单:ThreadDemo2.java public class ThreadDemo2 { public static void main(String args[]) { new TestThread ().start(); /*run()*/ while(true) { System.out.println(main thread is running); } } } class TestThread extends Thread { public void run() { while(true) { System.out.println(Thread.currentThread().getName() + is running); } } } 上面的代码让TestThread类继承了Thread类,也就是TestThread类具有了Thread类的全部特点,直接调用TestThread类对象的run方法,而是调用类对象从Thread类继承来的start方法。运行一下,我们能够看到两个while循环处的代码同时交替运行图5.2 这就是我们要讲的多线程。单线与多线程的区别。 可见,在单线程中,main函数必须等到TestThread .run函数返回后才能继续往下执行。而在多线程中,main函数启动了TestThread.run函数后,main函数不等待TestThread.run函数返回就继续运行,TestThread.run函数在一边独自运行,不影响原来的ain函数的运行,这好比将一个1G的CPU分成了两个500M的CPU,在一个CPU上运行main函数,而TestThread.run则在另一个CPU上运行,但它们都在向同一个显示器上输出,所以我们看到两个while循环处的代码同时交替运行。 在代码段run()中,可以通过线程的静态方法Thread.currentThread()得到当前线程实例对象hread的子类对象的run方法,而是调用Thread子类对象的start(从Thread类中继承的)方法,Thread类对象的start方法将产生一个新的线程,并在该线程上运行该Thread类对象中的run方法,根据面向对象的多态性,在该线程上实际运行的是Thread子类(也就是我们编写的那个类)对象中的run方法。 3. 由于线程的代码段在run方法中,那么该方法执行完成以后线程也就相应的结束了,因而我们可以通过控制run方法中的循环条件来控制线程的终止。 查看JDK文档中Thread类,发现有许多构造方法,在我

文档评论(0)

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

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

1亿VIP精品文档

相关文档