教学多线程专业知识讲座公开课一等奖优质课大赛微课获奖课件.pptx
《教学多线程专业知识讲座公开课一等奖优质课大赛微课获奖课件.pptx》由会员分享,可在线阅读,更多相关《教学多线程专业知识讲座公开课一等奖优质课大赛微课获奖课件.pptx(70页珍藏版)》请在咨信网上搜索。
java多多线程程序程程序设计第1页第1页l 程序、进程、线程程序、进程、线程 l 多任务、多进程、多线程多任务、多进程、多线程l Java对多线程支持、对多线程支持、Java主线程主线程l Java中创建线程办法中创建线程办法l 线程休眠过程线程休眠过程l 线程生命周期线程生命周期l 线程调度和优先级线程调度和优先级内 容 提 要 第2页第2页程序、进程程序、进程 v程序:计算机指令集合,一段静态代码,是应用程序:计算机指令集合,一段静态代码,是应用软件执行蓝本。它以文件形式存放在磁盘上。软件执行蓝本。它以文件形式存放在磁盘上。v进程:一个独立程序每一次运行称为一个进程,进程:一个独立程序每一次运行称为一个进程,是程序一次动态执行过程,它对应了从代码加载、是程序一次动态执行过程,它对应了从代码加载、执行到执行完成一个完整过程,这个过程也是进执行到执行完成一个完整过程,这个过程也是进程本身从产生、发展到消亡过程。作为执行蓝本程本身从产生、发展到消亡过程。作为执行蓝本同一段程序能够被多次加载到系统不同内存区域同一段程序能够被多次加载到系统不同内存区域分别执行,形成不同进程。比如:分别执行,形成不同进程。比如:v用用wordword编辑文稿时,同时在另一个窗口下载音乐,编辑文稿时,同时在另一个窗口下载音乐,这两个独立程序在同时运行,称为两个进程。这两个独立程序在同时运行,称为两个进程。v一个应用程序执行(如一个应用程序执行(如javajava程序)也对应于一个程序)也对应于一个进程。进程。v操作系统周期性将操作系统周期性将CPUCPU切换到不同任务,分时间片切换到不同任务,分时间片轮番运行每一个进程,而每一个进程都像是连续轮番运行每一个进程,而每一个进程都像是连续运行。每一个进程占有自己内存空间。运行。每一个进程占有自己内存空间。第3页第3页线程线程v线程:比进程更小执行单位,一个进程在其执行过线程:比进程更小执行单位,一个进程在其执行过程中能够产生多个线程,形成多条执行线索,每条程中能够产生多个线程,形成多条执行线索,每条线索即每个线程也有它本身产生、存在和消亡过程,线索即每个线程也有它本身产生、存在和消亡过程,也是一个动态过程。也是一个动态过程。v日常生活中程序、进程和线程:日常生活中程序、进程和线程:n程序:每学期课程表n进程:每学期教学活动n线程:每门课教学过程v一个程序运营后至少有一个进程,一个进程里能一个程序运营后至少有一个进程,一个进程里能够包括多个线程,但至少要包括一个线程。够包括多个线程,但至少要包括一个线程。第4页第4页单线程单线程v早期在计算机上开发程序大多是单线程,就是一早期在计算机上开发程序大多是单线程,就是一个程序只有一条从头到尾执行线索。个程序只有一条从头到尾执行线索。v我们之前编写程序都是我们之前编写程序都是单线程单线程程序,每个程序都程序,每个程序都有一个入口、一个出口以及一个顺序执行序列,有一个入口、一个出口以及一个顺序执行序列,在程序执行过程中任何指定期刻,都只有一个单在程序执行过程中任何指定期刻,都只有一个单独执行点。独执行点。第5页第5页多线程多线程v多线程是一个进程中多段代码同时并发执行,是多线程是一个进程中多段代码同时并发执行,是指程序中包含多条执行路径。在一个程序中同时指程序中包含多条执行路径。在一个程序中同时运行多个不同线程来执行不同任务,即允许单个运行多个不同线程来执行不同任务,即允许单个程序创建多个并行执行任务来完成各自任务。采程序创建多个并行执行任务来完成各自任务。采取多线程,一个进程若干任务就能够细分为多个取多线程,一个进程若干任务就能够细分为多个部分由多线程来处理,这么能够增强整个程序吞部分由多线程来处理,这么能够增强整个程序吞吐量,加紧反应时间。比如:吐量,加紧反应时间。比如:v浏览器程序就是一个多线程例子,浏览器程序就是一个多线程例子,当下载一个应当下载一个应用程序或图片时,能够同时进行其它任务,比如用程序或图片时,能够同时进行其它任务,比如播放动画或声音应用程序、打印一些内容、进行播放动画或声音应用程序、打印一些内容、进行排序或者其它工作。排序或者其它工作。v聊天室(多人同时聊天)聊天室(多人同时聊天)v 在现实生活中,很多过程都含有多条线索同时动在现实生活中,很多过程都含有多条线索同时动作特性,比如,我们能够一边走路,一边接电话,作特性,比如,我们能够一边走路,一边接电话,两件事并行。假如不允许这么做,我们会感觉极两件事并行。假如不允许这么做,我们会感觉极难受。难受。第6页第6页单线程程序多线程程序一个线程两个线程多线程多线程多线程和老式单线程在程序设计上最大区别在于,由于各个线程控制流彼此独立,使得各个线程之间代码是乱序执行。第7页第7页l 程序、进程、线程程序、进程、线程 l 多任务、多进程、多线程多任务、多进程、多线程l Java对多线程支持、对多线程支持、Java主线程主线程l Java中创建线程办法中创建线程办法l 线程休眠过程线程休眠过程l 线程生命周期线程生命周期l 线程调度和优先级线程调度和优先级内 容 提 要 第8页第8页多任务、多进程、多线程多任务、多进程、多线程v多线程和多任务是两个既有联系又有区别概念:多线程和多任务是两个既有联系又有区别概念:n多任务是针对操作系统而言,代表着操作系统能够同时运营多个应用程序(多进程),比如我们能够利用计算机边听音乐,边浏览网页,或者从网络上下载东西,等等。以前古老DOS操作系统(V 6.22)是单任务,还没有线程概念,系统在每次只能做一件事情。比如你在copy东西时候不能rename文献名。为了提升系统利用效率,采用批处理来批量执行任务。n现在操作系统都是多任务操作系统,每个运营任务就是操作系统所做一件事情,比如你在听歌同时还在用MSN和好友聊天。听歌和聊天就是两个任务,这个两个任务是“同时”进行。一个任务普通相应一个进程,也也许包括好几种进程。比如运营MSN就相应一个MSN进程,假如你用是windows系统,你就能够在任务管理器中看到操作系统正在运营进程信息。第9页第9页多任务、多进程、多线程多任务、多进程、多线程v多线程是针对一个程序而言,代表着一个程序内多线程是针对一个程序而言,代表着一个程序内部能够同时执行线程个数,而每个线程能够完成部能够同时执行线程个数,而每个线程能够完成不同任务。不同任务。v普通来说,当运行一个应用程序时候,就开启了普通来说,当运行一个应用程序时候,就开启了一个进程,当然有些会开启多个进程。开启进程一个进程,当然有些会开启多个进程。开启进程时候,操作系统会为进程分派资源,其中最主要时候,操作系统会为进程分派资源,其中最主要资源是内存空间,因为程序是在内存中运行。在资源是内存空间,因为程序是在内存中运行。在进程中,有些程序流程块是能够乱序执行,而且进程中,有些程序流程块是能够乱序执行,而且这个代码块能够同时被多次执行。实际上,这么这个代码块能够同时被多次执行。实际上,这么代码块就是线程体。线程是进程中乱序执行代码代码块就是线程体。线程是进程中乱序执行代码流程。当多个线程同时运行时候,这么执行模式流程。当多个线程同时运行时候,这么执行模式成为并发执行。成为并发执行。v多线程目标是为了最大程度利用多线程目标是为了最大程度利用CPUCPU资源。资源。第10页第10页多任务、多进程、多线程多任务、多进程、多线程v对于一个进程中多个线程来说,多个线程共享进对于一个进程中多个线程来说,多个线程共享进程内存块,当有新线程产生时候,操作系统不分程内存块,当有新线程产生时候,操作系统不分派新内存,而是让新线程共享原有进程块内存。派新内存,而是让新线程共享原有进程块内存。因此,线程间通信很容易,速度也很快。不同进因此,线程间通信很容易,速度也很快。不同进程因为处于不同内存块,因此进程之间通信相对程因为处于不同内存块,因此进程之间通信相对困难。困难。v实际上,操作系统多进程实现了多任务并发执行,实际上,操作系统多进程实现了多任务并发执行,程序多线程实现了进程并发执行。多任务、多进程序多线程实现了进程并发执行。多任务、多进程、多线程前提都是要求操作系统提供多任务、程、多线程前提都是要求操作系统提供多任务、多进程、多线程支持。多进程、多线程支持。第11页第11页多任务、多进程、多线程多任务、多进程、多线程v归纳起来,操作系统能够同时执行多个任务,每归纳起来,操作系统能够同时执行多个任务,每个任务就是进程,进程能够同时执行多个任务,个任务就是进程,进程能够同时执行多个任务,每个任务就是线程。每个任务就是线程。第12页第12页l 程序、进程、线程程序、进程、线程 l 多任务、多进程、多线程多任务、多进程、多线程l Java对多线程支持、对多线程支持、Java主线程主线程l Java中创建线程办法中创建线程办法l 线程休眠过程线程休眠过程l 线程生命周期线程生命周期l 线程调度和优先级线程调度和优先级内 容 提 要 第13页第13页Java对多线程支持对多线程支持v很多程序语言都是利用外部线程软件包来实现多很多程序语言都是利用外部线程软件包来实现多线程。如线程。如C C语言。语言。vJavaJava是第一个支持内置线程操作主流编程语言。是第一个支持内置线程操作主流编程语言。JavaJava语言一大特性就是内置对多线程支持。多线语言一大特性就是内置对多线程支持。多线程指同时存在几个执行体,按几条不同执行线索程指同时存在几个执行体,按几条不同执行线索共同工作情况,它使得编程人员能够很方便地开共同工作情况,它使得编程人员能够很方便地开发出含有多线程功效、能同时处理多个任务功效发出含有多线程功效、能同时处理多个任务功效强大应用程序。强大应用程序。v即使执行线程给人一个几个事件同时发生感觉,即使执行线程给人一个几个事件同时发生感觉,但这只是一个错觉,因为我计算机在任何给定时但这只是一个错觉,因为我计算机在任何给定时刻只能执行那些线程中一个,为了建立这些线程刻只能执行那些线程中一个,为了建立这些线程正在同时执行感觉,正在同时执行感觉,javajava快速地把控制从一个线快速地把控制从一个线程切换到另外一个线程多个线程执行是并发,也程切换到另外一个线程多个线程执行是并发,也是一个逻辑上是一个逻辑上“同时同时”,而不是物理上,而不是物理上“同时同时”。假如系统只有一个假如系统只有一个CPUCPU,那么真正,那么真正“同时同时”是不可是不可能,不过因为能,不过因为CPUCPU速度非常快,用户感觉不到其中速度非常快,用户感觉不到其中区分,我们也没必要去关心它,只需要构想各个区分,我们也没必要去关心它,只需要构想各个线程是同时执行即可。假如系统有多个线程是同时执行即可。假如系统有多个CPUCPU,能够,能够实现真正实现真正“同时同时”执行。执行。v在应用程序中使用多线程不会增加在应用程序中使用多线程不会增加CPUCPU数据处理能数据处理能力。力。第14页第14页Java主线程主线程v普通常见普通常见JavaJava应用程序都是单线程。比如,用应用程序都是单线程。比如,用javajava命令运命令运营一个最简朴营一个最简朴HelloWorldJavaHelloWorldJava应用程序时,就启动了一个应用程序时,就启动了一个JVMJVM进程,进程,JVMJVM找到程序程序入口点找到程序程序入口点main()main(),然后运营,然后运营mainmain()()办法,这样就产生了一个线程,这个线程称之为办法,这样就产生了一个线程,这个线程称之为“主线主线程程”。v当当JVMJVM加载代码,发觉加载代码,发觉mainmain办法之后,就会启动一个线程,办法之后,就会启动一个线程,这个线程称作这个线程称作“主线程主线程”,该线程负责执行,该线程负责执行mainmain办法。假办法。假如如mainmain中没有创建其它线程,那么当中没有创建其它线程,那么当mainmain办法执行完最后办法执行完最后一条语句,一条语句,JVMJVM就会结束我们就会结束我们javajava应用程序。假如应用程序。假如mainmain中中又创建了其它线程,那么又创建了其它线程,那么JVMJVM就要在主线程和其它线程之就要在主线程和其它线程之间轮流切换,确保每个线程都有机会使用间轮流切换,确保每个线程都有机会使用CPUCPU资源,资源,mainmain办法即使执行完最后语句,办法即使执行完最后语句,JVMJVM也不会结束我们程序,也不会结束我们程序,JVMJVM始终等到程序中所有线程都结束之后,才结束我们始终等到程序中所有线程都结束之后,才结束我们javajava应应用程序用程序第15页第15页Java主线程主线程第16页第16页多线程长处多线程长处 v使用多线程进行程序设计含有以下优点:使用多线程进行程序设计含有以下优点:v 1 1)多线程编程简朴,效率高(能直接共)多线程编程简朴,效率高(能直接共享数据和资源,多进程不能)享数据和资源,多进程不能)v 2)2)适合于开发服务程序(如适合于开发服务程序(如WebWeb服务,服务,聊天服务等)聊天服务等)v3)3)适合于开发有各种交互接口程序(如适合于开发有各种交互接口程序(如聊天程序客户端,网络下载工具)聊天程序客户端,网络下载工具)v 4)4)减轻编写交互频繁、包括面多程序减轻编写交互频繁、包括面多程序困难(如监听网络端口)困难(如监听网络端口)v 5)5)程序吞吐量会得到改进(同时监听程序吞吐量会得到改进(同时监听各种设备,如网络端口、串口、并口以及其它外各种设备,如网络端口、串口、并口以及其它外设)设)v 6)6)有多个处理器系统,能够并发运行不同有多个处理器系统,能够并发运行不同线程(不然,任何时刻只有一个线程在运行)线程(不然,任何时刻只有一个线程在运行)第17页第17页l 程序、进程、线程程序、进程、线程 l 多任务、多进程、多线程多任务、多进程、多线程l Java对多线程支持、对多线程支持、Java主线程主线程l Java中创建线程办法中创建线程办法l 线程休眠过程线程休眠过程l 线程生命周期线程生命周期l 线程调度和优先级线程调度和优先级内 容 提 要 第18页第18页Java中创建线程办法中创建线程办法vJavaJava虚拟机允许应用程序并发地运营多个执行线程。虚拟机允许应用程序并发地运营多个执行线程。JavaJava语言提供了多线程编程扩展点,并给出了功效强大线程控语言提供了多线程编程扩展点,并给出了功效强大线程控制制APIAPI。vJavaJava线程是通过线程是通过javajava软件包软件包java.langjava.lang中定义中定义ThreadThread类类来来实现。实现。vJavaJava中有两种办法创建线程:中有两种办法创建线程:n 继承Thread类。n 实现实现RunnableRunnable接口。接口。v无论使用哪种办法,都需要用到无论使用哪种办法,都需要用到JavaJava基础类库中基础类库中ThreadThread类类及其办法。及其办法。v在在JavaJava语言中,线程也是一个对象,但并非任何对象都能语言中,线程也是一个对象,但并非任何对象都能够成为线程,只有实现够成为线程,只有实现RunnableRunnable接口或继承了接口或继承了ThreadThread类对类对象才干成为线程。象才干成为线程。第19页第19页 Thread类类 vpublic class Thread extends Object implements RunnablenThread类是一个详细类,即不是抽象类,该类封装了线程行为。要创建一个线程,程序员必须创建一个Thread类子类。nThread类提供了大量办法来以便控制各个线程。第20页第20页Thread类结构办法类结构办法(1)public Thread():创建一个系统线程类对象。线程默认名是Thread-n,n是从0开始递增整数。(2)public Thread(String name):在第一个结构办法基础上,为所创建线程对象指定一个字符串名称供以后使用。(3)public Thread(Runnable target):该结构办法包括 了Runnable类型参数,它是实现Runnable接口类实例对象,基于该结构办法创建线程对象,将线程业务逻辑交由参数所传递Runnable对象去实现。ntargettarget是实现了是实现了RunnableRunnable接口类接口类targettarget对象。对象。n线程默认名是线程默认名是Thread-nThread-n,n n是从是从0 0开始递增整数。开始递增整数。第21页第21页Thread类结构办法类结构办法(4)public Thread(Runnable target,String name):实现前两个结构办法功效。(5)public Thread(ThreadGroup group,Runnable target):生成一个指定线程组和目的对象线程。(6)public Thread(ThreadGroup group,String name):生成一个指定线程组和名字线程。v利用结构办法创建新线程对象之后,这个对象中相关数据被初始化,从而进入线程生命周期第一个状态新建状态。第22页第22页Thread类主要组员办法类主要组员办法 v 办法办法v 功效功效CurrentThread()CurrentThread()v返回当前运营返回当前运营ThreadThread对象对象start()start()v启动线程启动线程run()run()v由调度程序调用,当由调度程序调用,当run()run()办法返回时,办法返回时,该该v线程停止线程停止stop()stop()v使调用它线程马上停止执行使调用它线程马上停止执行sleep(long n)sleep(long n)v使线程睡眠使线程睡眠n n毫秒,毫秒,n n毫秒后,线程能够再毫秒后,线程能够再v次运营次运营suspend()suspend()v使线程挂起,暂停运营使线程挂起,暂停运营Not RunnableNot Runnableresume()resume()v恢复挂起线程,使处于可运营状态恢复挂起线程,使处于可运营状态vRunnableRunnableyield()yield()v将将CPUCPU控制权积极移送到下一个可运营线控制权积极移送到下一个可运营线程程第23页第23页Thread类主要办法类主要办法(续续)setName(String)setName(String)赋予线程一个名字getName()getName()v取得由取得由setName()setName()办法设置线程办法设置线程v名字字符串名字字符串getPriority()getPriority()返回线程优先级setPriority(int)setPriority(int)设置线程优先级join()join()v当前线程等待调用该办法线程当前线程等待调用该办法线程结结v束后束后,再往下执行再往下执行setDaemon(boolean)setDaemon(boolean)v设置该线程是设置该线程是daemondaemon线程还是线程还是用户用户v线程,线程,DaemonDaemon线程也称服务线线程也称服务线程,程,v通常编成无限循环,在后台连通常编成无限循环,在后台连续运续运v行。行。第24页第24页Thread类主要办法类主要办法(续续)v在上述办法中,在上述办法中,start()start()办法与办法与run()run()办法最为惯办法最为惯用,用,start()start()办法用于启动线程,办法用于启动线程,run()run()办法为线办法为线程主体办法,能够依据需要重写程主体办法,能够依据需要重写run()run()办法。办法。第25页第25页Thread类主要办法类主要办法(续续)vpublic void start()public void start()n启动线程,使该线程开始执行。启动线程,使该线程开始执行。n多次启动一个线程是非法。尤其是当线程已经结束执多次启动一个线程是非法。尤其是当线程已经结束执行后,不能再重新启动。行后,不能再重新启动。第26页第26页Thread类主要办法类主要办法(续续)vpublic void run()public void run():nThreadThread子类应当重写该办法,内容为该线程应执行任子类应当重写该办法,内容为该线程应执行任务。务。第27页第27页Thread类主要办法类主要办法(续续)vpublic final void setPriority(int newPriority)n线程执行是一个抢占方式,优先级高比优先级低要取得更多执行时间,假如想让一个线程比其它线程有更多时间运营,能够通过设置线程优先级处理。n如一个线程创建后,能够通过调用setPriority()办法来设置其优先级。nnewPriority是一个1-10之间正整数,数值越大,优先级越高,系统有一些常数值:1 1MAX_PRIORITYMAX_PRIORITY:最高优先级(值为:最高优先级(值为1010)2 2MIN_PRIORITYMIN_PRIORITY:最低优先级(值为:最低优先级(值为1 1)3 3NORM_PRIORITYNORM_PRIORITY:默认优先级(值为:默认优先级(值为5 5)v线程创建时,继承了父线程优先级。父线程是指执行创建新线程对象语句线程,它也许是主线程,也也许是用户自己定义线程。v普通情况下,主线程含有默认优先级。第28页第28页Thread类主要办法类主要办法(续续)vpublic final int getPriority()public final int getPriority()n返回线程优先级。返回线程优先级。v在线程创建之后,能够通过在线程创建之后,能够通过getPriority()getPriority()办法得办法得到线程优先级,也能够通过到线程优先级,也能够通过setPriority()setPriority()办法改办法改变线程优先级。变线程优先级。第29页第29页Thread类主要办法类主要办法(续续)vpublic final String getName()public final String getName()vpublic final void setName(Stringname)public final void setName(Stringname)v每个线程在创建时可认为其指定名称,如果未指每个线程在创建时可认为其指定名称,如果未指定,则由系统进行指定。对于根本程名称是:定,则由系统进行指定。对于根本程名称是:mainmain。对于其他线程,默认名称样式是:。对于其他线程,默认名称样式是:“Thread-“Thread-数字数字”。v可以使用可以使用ThreadThread类类getName()getName()方法获得线程名,使方法获得线程名,使用用setName()setName()方法设置线程名。方法设置线程名。v不同线程可以有相同名称,不能使用线程名来区不同线程可以有相同名称,不能使用线程名来区分线程。分线程。第30页第30页Thread类主要办法类主要办法(续续)vpublic long getId()public long getId()v每个线程在创建时会被分派一个每个线程在创建时会被分派一个IDID属性,能够使属性,能够使用用ThreadThread类类getID()getID()方法取得线程方法取得线程IDID。ThreadThread类并类并没有提供修改没有提供修改IDID方法。方法。v该方法返回该线程标识符。线程该方法返回该线程标识符。线程 ID ID 是一个正是一个正 long long 数,在创建该线程时生成。线程数,在创建该线程时生成。线程 ID ID 是唯一,是唯一,并终生不变。线程终止时,该线程并终生不变。线程终止时,该线程 ID ID 能够被重能够被重新使用。新使用。v不同线程不能有相同不同线程不能有相同IDID,系统是使用,系统是使用IDID值来区分值来区分线程。线程。第31页第31页办法办法1:继承:继承Thread类创建线程类创建线程vJava.langJava.lang包中包中ThreadThread类,是一个专门用来创建线程类,类,是一个专门用来创建线程类,该类中提供了线程所用到属性和办法,该类中提供了线程所用到属性和办法,这个类已经具备这个类已经具备了创建和运营线程所有必要架构,通过重写了创建和运营线程所有必要架构,通过重写ThreadThread类中类中runrun()()办法,以实现用户所需要功效,实例化自定义办法,以实现用户所需要功效,实例化自定义ThreadThread类,使用类,使用start()start()办法启动线程。办法启动线程。第32页第32页办法办法1:继承:继承Thread类创建线程类创建线程通过创建通过创建ThreadThread类子类来实现多线程。类子类来实现多线程。环节下列:环节下列:1.1.设计设计ThreadThread类子类,重写父类类子类,重写父类run()run()办法。办法。class myThread extends Thread class myThread extends Thread public void run()public void run()/添加你自己线程代码添加你自己线程代码 第33页第33页办法办法1:继承:继承Thread类创建线程类创建线程2.2.在在main()main()办法里面实例化办法里面实例化myThreadmyThread类,并运营该对象类,并运营该对象startstart()()办法。办法。public static void main(String args)public static void main(String args)myThread thread1=new myThread(“myThread thread1=new myThread(“线程线程1”);/1”);/为为该线程命名该线程命名 thread1.start();/thread1.start();/使用使用start()start()办法启动线程。当办法启动线程。当JVMJVM将将CPUCPU使用权切换给线程时,会自动执行使用权切换给线程时,会自动执行run()run()办法。办法。注意:线程启动是需要一个创建它进程,比如上面启动线注意:线程启动是需要一个创建它进程,比如上面启动线程代码能够写在一个程代码能够写在一个main()main()办法里面,运营时事实上有办法里面,运营时事实上有两个线程,一个是主线程,一个是名为两个线程,一个是主线程,一个是名为“线程线程1”1”线程,线程,这两个线程同时运营。这两个线程同时运营。第34页第34页【例例1】继承继承Thread类创建线程类创建线程/创建一个主运营类创建一个主运营类/在主运营办法中,创建两个线程,让其交替运营在主运营办法中,创建两个线程,让其交替运营public class threadtest1public class threadtest1 public static void main(String args)public static void main(String args)compute t1=new compute();compute t1=new compute();compute1 t2=new compute1();compute1 t2=new compute1();t1.setName(t1.setName(线程线程1);1);t2.setName(t2.setName(线程线程2);2);t1.start();t1.start();t2.start();t2.start();/创建创建computecompute线程类线程类/在这个线程类中,通过循环语句输出在这个线程类中,通过循环语句输出1-101-10十个整型数据十个整型数据class compute extends Thread class compute extends Thread public void run()public void run()for(int i=0;i10;i+)for(int i=0;i10;i+)System.out.println(this.getName()+:+i);System.out.println(this.getName()+:+i);/创建创建computecompute线程类线程类/在这个线程类中,通过循环语句输出阐明性语句在这个线程类中,通过循环语句输出阐明性语句class compute1 extends Thread class compute1 extends Thread public void run()public void run()for(int i=0;i10;i+)for(int i=0;i10;i+)System.out.println(this.getName()+:+i);System.out.println(this.getName()+:+i);在使用java语言编写多线程程序时,运行结果与操作系统密切相关,即使在同一台机器上,多次运行同一个程序,结果也可能不同。实际上全部多线程代码执行次序都是不确定,每次执行结果都是随机。第35页第35页【例例2:(书例(书例10-1)】继承继承Thread类创建线程类创建线程/继承Tread类public class MyThread extends Thread/count变量用于统计打印次数并共享变量private static int count=0;public MyThread(String name)super(name);public static void main(String args)/main办法开始MyThread p=new MyThread(t1);/创建一个线程实例p.start();/执行线程for(int i=0;i 5;i+)/主线程main办法执行一个循环 count+;System.out.println(count+:main);/主线程中打印count+“main”变量值,并换行 public void run()/线程类必须有run()办法for(int i=0;i 5;i+)count+;System.out.println(count+:+this.getName();第36页第36页【例例3】继承继承Thread类创建线程类创建线程class SimpleThread extends Thread private String name;public SimpleThread(String name)this.name=name;public void run()/线程要执行逻辑操作线程要执行逻辑操作for(int i=0;i 10;i+)System.out.print(this.name);try sleep(1000);/睡眠睡眠1秒钟,以便观测线程执行结果秒钟,以便观测线程执行结果 catch(InterruptedException e)e.printStackTrace();public class ThreadDemo1 public static void main(String args)SimpleThread thread1=new SimpleThread(张张);/创建线程对象实例创建线程对象实例SimpleThread thread2=new SimpleThread(李李);SimpleThread thread3=new SimpleThread(王王);thread1.start();/启动线程启动线程thread2.start();/启动线程启动线程thread3.start();/启动线程启动线程第37页第37页办法办法1:继承继承Thread类创建线程类创建线程v当线程类继承当线程类继承ThreadThread类时,直接使用类时,直接使用thisthis即可获即可获取当前线程。取当前线程。v运营多线程程序时不要忘了运营多线程程序时不要忘了javajava程序运营时默认程序运营时默认主线程,主线程,main()main()办法办法体就是主线程线程执行办法办法体就是主线程线程执行体。体。v使用继承使用继承ThreadThread类办法来创建线程类时,多个线类办法来创建线程类时,多个线程之间无法共享线程类实例变量。程之间无法共享线程类实例变量。第38页第38页办法办法2:实现Runnable接口创建线程v由于由于javajava语言仅支持单重继承,因此当定义线程需要继语言仅支持单重继承,因此当定义线程需要继承多个类时用上述办法就无法实现,这时,就需要采用承多个类时用上述办法就无法实现,这时,就需要采用javajava提供另外一个定义线程办法提供另外一个定义线程办法-实现实现RunnableRunnable接口。接口。它是在结构线程过程中也许出现多重继承问题一个处理它是在结构线程过程中也许出现多重继承问题一个处理方案。方案。v实现实现RunnableRunnable接口类就能够成为线程,接口类就能够成为线程,ThreadThread类就是由类就是由于实现了于实现了RunnableRunnable接口因此才含有了线程功效接口因此才含有了线程功效vRunnableRunnable接口位于接口位于java.langjava.lang包中,这个接口非常简朴,包中,这个接口非常简朴,仅定义了一个仅定义了一个run()run()办法办法,接口定义下列:,接口定义下列:public interface Runnablepublic interface Runnablepublic abstract void run();public abstract void run();第39页第39页办法办法2:实现Runnable接口创建线程v该该接接口口只只定定义义了了一一个个办办法法runrun(),因因此此必必须须在在新新类类中中实实现现它它。但但是是RunnableRunnable接接口口并并没没有有任任何何对对线线程程支支持持,我我们们还还必必须须创创建建ThreadThread类类实实例例,这这一一点点通通过过ThreadThread类结构办法类结构办法 public Thread(Runnable target);public Thread(Runnable target);来实现。来实现。第40页第40页办法办法2:实现Runnable接口创建线程v在java中,线程是一个对象,不是所有对象都能够称为线程,只有实现了Runnable接口类才干够称为线程。v实现Runnable接口创建新线程环节下列:1.1.新建一个类,该类实现了新建一个类,该类实现了RunnableRunnable接口并重写接口并重写run()run()办法。办法。重写重写runrun()()办法中包括要在新线程中运营代码。办法中包括要在新线程中运营代码。class MyRunnable implements Runnable public void run()/把你任务代码写在这里 第41页第41页办法办法2:实现Runnable接口创建线程2.2.在在main()main()办法中使用刚刚新编写类创建办法中使用刚刚新编写类创建RunnableRunnable接口接口类型对象。类型对象。MyRunnable r=new MyRunnable();MyRunnable r=new MyRunnable();3.3.在在main()main()办法中创建一个办法中创建一个ThreadThread类对象类对象t t,结构办- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学 多线程 专业知识 讲座 公开 一等奖 优质课 大赛 获奖 课件
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文