网站大量收购闲置独家精品文档,联系QQ:2885784924

4.1创建及控制线程.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.1创建及控制线程 主讲教师:胡祝华 一、知识能力目标 1.掌握线程概念及其实现机制; 2.掌握线程属性及其方法; 3.掌握线程的创建、运行、阻塞和终止。 4.能创建具有线程的Java程序 二、项目28 简单的多线程程序 使用一个线程用于计时,并使用另一个线程完成工作。在这个实例中,由run()方法实现的线程用于打印信息,由main()方法创建的主线程用于计时,这个线程一开始休眠10秒再开始执行。 1.程序代码 //SimpleThread.java public class SimpleThread extends Thread{ public static boolean f=false; /*声明变量f成为控制线程运行的标志*/ public void run(){ /*为线程创建run()方法*/ work(); /*如果想让线程完成不同的工作,只要修改work()方法*/ } private void work(){ //创建并实现work()方法,本例中work方法的功能是输出进行加法运算的次数 for(long i=1;;i++){ if(f==true){ System.out.println(进行了+i+次加法运算); break; } }} public static void main(String args[]){ SimpleThread r=new SimpleThread (); r.start(); /*调用start()方法运行run()方法从而启动线程*/ try{ Thread.sleep(10000); /*计时,主线程休眠10秒后再次开始运行*/ } catch (InterruptedException e){ } f=true; } } 2.相关知识 程序、进程、线程和多任务 程序(program) 对数据描述与操作的代码的集合 应用程序执行的脚本。 进程(process) 程序的一次执行过程 操作系统运行程序的基本单位 系统运行一个程序就是一个进程从创建、运行到消亡的过程 系统可以为一个程序同时创建多个进程 线程(thread) 比进程更小的运行单位 程序中单个顺序的流控制 一个进程可以被划分成多个线程 线程与程序 相同点:有开始、一系列可执行的命令序列、一个结束。在执行的任何时候,只有一个执行点 不同点:线程本身不能运行,只能包含在程序中,在程序中执行。一个线程在程序运行时,必须争取到为自己分配的系统资源。 多线程(相对于单线程而言) 在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。 与进程不同:同类多线程共享一块内存空间和一组系统资源,所以系统创建多线程开销相对较小。因此,也称线程为轻负荷进程。 把程序分解成彼此独立的子任务,每一个独立的子任务由一个线程来完成 创建线程和启动线程的区别 在一个线程对新线程的Thread对象调用start()方法之前,这个新线程并没有真正开始执行 Thread对象在其线程真正启动之前就已经存在了,而且其线程退出之后仍然存在。 main()方法中可以创建若干个Thread类或者它的子类的对象,并且不设置这些对象中的任何引用 Java的垃圾收集器一般并不会清理这些对象,只有在线程离开了run()并且死亡之后才把它们清除。 不建议在构造器中通过start()方法启动线程 暴露了部分构造的对象给新线程,从封装的角度看是不可取的。 如果对象拥有一个线程,那么它应该提供一个启动该线程的start()或init()方法,而不是在构造器中启动它 应用拓展 主线程由main()创建,程序开始运行,在运行过程中另一个线程需要立即运行,主线程为这个线程让步,暂停运行,等待这个抢先运行的线程结束后再继续运行 1.程序代码 // Joinexam.java class Thread1 extends Thread{ public Thread1(){ start(); //Thread1对象实例化的时候就会开始执行线程 } public void run(){ for(int i=1;i=3;i++){ /*使用getName()方法获得当前线程的名称*/ System.out.println(线程+this.getName()+运行了+i+秒); /*本程序块控制程序每次完成输出后休眠1秒*/

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档