chapter14ThreadPartI技巧.pptVIP

  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文档。上传文档
查看更多
Introduction To Java Programming College Of Software Liu. Zhi Gang Email:dqpilzg@163.com Chapter20 Thread 1、概述 进程 正在执行中的程序,其实就是启动程序后,程序在内存中运行的那片空间 线程 进程中的一个执行单元,负责进程中的程序的执行 一个进程至少要有一个线程 一个进程可以有多个线程,此时为多线程应用程序 程序使用了多线程,可以实现部分程序“同时执行” ,也就是并发。 QQ 聊天 发文件 酷我音乐盒 音乐播放 歌词滚动显示 360 体检程序 杀毒 进程1 进程2 进程3 线程 线程 在计算机中到底哪个组件,谁来计算处理数据? 硬盘??? 内存??? CPU??? 给小朋友喂饭 注意 单个CPU处理多线程程序时是通过在多个线程间快速切换完成的,在我们看来好像并发一样 单个CPU不能同时执行多个线程,是随机轮流的执行,多个CPU才可以真正实现多线程的并发。 2、Demo 单个线程 此外,main函数是程序的入口,程序从main开始执行,因此也把main函数称为主线程。 如果显示小强100000000次??何时会看见旺财??? 主线程在执行显示小强的同时,再开辟一个线程来执行显示旺财 创建新执行线程有两种方法。 第一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类 run 方法。。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成: 然后,下列代码会创建并启动一个线程: 2、线程的创建使用——方法1 案例参考《Chapter14 线程案例代码.doc》 实现线程的方法2:继承Thread类 (1)定义类继承Thread (2)在该类中重写run方法,将线程要执行的任务代码放到里面 (3)调用线程时,首先该子类的对象,该对象就是线程对象,然后调用该对象的start方法启动线程(此时JVM会调用该对象的run方法执行线程的代码) (4)注意调用一次start方法即可启动线程,同一个对象在同一个位置调用多次start,JVM只启动一次线程 (1)调用Thread子类对象的run方法只是普通调用方法,并不开启线程。若要开启线程,必须调用该对象的start方法 (2)Thread.currentThread()获取当前CPU执行的线程对象 (3)Thread.currentThread().getName()获取当前线程的名称 默认主线程的名称是main,自定义的线程Thread-1,多个时,数字顺延,Thread-2,Thread-3.。。。 (4)Thread.currentThread().setName()设置当前线程的名称 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示: 然后,下列代码会创建并启动一个线程: 2、线程的创建使用——方法2 案例参考《Chapter14 线程案例代码.doc》 实现线程的方法2:实现Runnable接口 (1)定义类实现Runnable接口 (2)在该类中重写run方法,将线程要执行的任务代码放到里面 (3)调用线程时,首先创建Thread类的对象,同时将Runnable子类对象作为参数传递给Thread的构造函数,最后调用该对象的start方法启动线程 方法1:继承Thread 方法2:实现Runnable接口 (1)Java只支持单集成,如果线程类已经继承了别的类,则再无法从Thread进行继承,因此方法1用起来不方便 (2)多个线程处理同一个资源(例如访问修改某个非静态成员变量)的情况时,如果想要达到多个线程共享该资源的情况,必须使用方法2。原因:方法1由于每个线程就是一个对象,多个对象对于该资源都是单独的,因此会导致多个线程无法共享该资源,而是每个线程一份。方法2则可以实现,因为多个线程可以使用同一个对象。具体参看文档中的售票案例。 案例参考《Chapter14 线程案例代码.doc》 3、后台线程 3、后台线程 (1)默认创建的线程都是前台线程 (2)调用线程对象的setDaemon(true)方法将该线程设置为后台线程 (3)对于一个进程(程序)来说,只要有一个前台线程再运行,程序就不会结束,例如售票程序,必须等所有窗口售票完成后,程序才能退出。 案例参考《Chapter14 线程案例代码.doc》 * CPU在执行线程时是不断的切换执行的 原因在于最大限度发挥CPU的处理速度。 举例:幼儿园给小朋友喂饭,小朋友是各个任务,是多个线程。教室里所有的孩子是一个进程。我是老师,也就

文档评论(0)

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

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

1亿VIP精品文档

相关文档