收藏 分销(赏)

教学多线程专业知识讲座省公共课一等奖全国赛课获奖课件.pptx

上传人:快乐****生活 文档编号:4132202 上传时间:2024-07-31 格式:PPTX 页数:70 大小:1.85MB
下载 相关 举报
教学多线程专业知识讲座省公共课一等奖全国赛课获奖课件.pptx_第1页
第1页 / 共70页
教学多线程专业知识讲座省公共课一等奖全国赛课获奖课件.pptx_第2页
第2页 / 共70页
教学多线程专业知识讲座省公共课一等奖全国赛课获奖课件.pptx_第3页
第3页 / 共70页
教学多线程专业知识讲座省公共课一等奖全国赛课获奖课件.pptx_第4页
第4页 / 共70页
教学多线程专业知识讲座省公共课一等奖全国赛课获奖课件.pptx_第5页
第5页 / 共70页
点击查看更多>>
资源描述

1、java多多线程程序程程序设计第1页l程序、进程、线程程序、进程、线程l多任务、多进程、多线程多任务、多进程、多线程lJava对多线程支持、对多线程支持、Java根本程根本程lJava中创建线程方法中创建线程方法l线程休眠过程线程休眠过程l线程生命周期线程生命周期l线程调度和优先级线程调度和优先级内 容 提 要 第2页程序、进程程序、进程 v程序:计算机指令集合,一段静态代码,是应用软件执行程序:计算机指令集合,一段静态代码,是应用软件执行蓝本。它以文件形式存放在磁盘上。蓝本。它以文件形式存放在磁盘上。v进程:一个独立程序每一次运行称为一个进程,是程序一进程:一个独立程序每一次运行称为一个进程

2、,是程序一次动态执行过程,它对应了从代码加载、执行到执行完成次动态执行过程,它对应了从代码加载、执行到执行完成一个完整过程,这个过程也是进程本身从产生、发展到消一个完整过程,这个过程也是进程本身从产生、发展到消亡过程。作为执行蓝本同一段程序能够被屡次加载到系统亡过程。作为执行蓝本同一段程序能够被屡次加载到系统不一样内存区域分别执行,形成不一样进程。比如:不一样内存区域分别执行,形成不一样进程。比如:n用word编辑文稿时,同时在另一个窗口下载音乐,这两个独立程序在同时运行,称为两个进程。n一个应用程序执行(如java程序)也对应于一个进程。n操作系统周期性将CPU切换到不一样任务,分时间片轮番

3、运行每一个进程,而每一个进程都像是连续运行。每一个进程占有自己内存空间。第3页线程线程v线程:比进程更小执行单位,一个进程在其执行过线程:比进程更小执行单位,一个进程在其执行过程中能够产生多个线程,形成多条执行线索,每条程中能够产生多个线程,形成多条执行线索,每条线索即每个线程也有它本身产生、存在和消亡过程,线索即每个线程也有它本身产生、存在和消亡过程,也是一个动态过程。也是一个动态过程。v日常生活中程序、进程和线程:日常生活中程序、进程和线程:n程序:每学期课程表n进程:每学期教学活动n线程:每门课教学过程v一个程序运行后最少有一个进程,一个进程里能一个程序运行后最少有一个进程,一个进程里能

4、够包含多个线程,但最少要包含一个线程。够包含多个线程,但最少要包含一个线程。第4页单线程单线程v早期在计算机上开发程序大多是单线程,就是一早期在计算机上开发程序大多是单线程,就是一个程序只有一条从头到尾执行线索。个程序只有一条从头到尾执行线索。v我们之前编写程序都是我们之前编写程序都是单线程单线程程序,每个程序都程序,每个程序都有一个入口、一个出口以及一个次序执行序列,有一个入口、一个出口以及一个次序执行序列,在程序执行过程中任何指定时刻,都只有一个单在程序执行过程中任何指定时刻,都只有一个单独执行点。独执行点。第5页多线程多线程v多线程是一个进程中多段代码同时多线程是一个进程中多段代码同时并

5、发并发执行,是指程序中包含多条执行路径。执行,是指程序中包含多条执行路径。在一个程序中同时运行多个不一样线程来执行不一样任务,即允许单个程序在一个程序中同时运行多个不一样线程来执行不一样任务,即允许单个程序创建多个并行执行任务来完成各自任务。采取多线程,一个进程若干任务就创建多个并行执行任务来完成各自任务。采取多线程,一个进程若干任务就能够细分为多个部分由多线程来处理,这么能够增强整个程序吞吐量,加紧能够细分为多个部分由多线程来处理,这么能够增强整个程序吞吐量,加紧反应时间。比如:反应时间。比如:n浏览器程序就是一个多线程例子,当下载一个应用程序或图片时,能够同时进行其它任务,比如播放动画或声

6、音应用程序、打印一些内容、进行排序或者其它工作。n聊天室(多人同时聊天)v 在现实生活中,很多过程都含有多条线索同时动作特征,比如,我们能够一在现实生活中,很多过程都含有多条线索同时动作特征,比如,我们能够一边走路,一边接电话,两件事并行。假如不允许这么做,我们会感觉极难受。边走路,一边接电话,两件事并行。假如不允许这么做,我们会感觉极难受。第6页单线程程序多线程程序一个线程两个线程多线程多线程多线程和传统单线程在程序设计上最大区分在于,因为各个线程控制流彼此独立,使得各个线程之间代码是乱序执行。第7页l程序、进程、线程程序、进程、线程l多任务、多进程、多线程多任务、多进程、多线程lJava对

7、多线程支持、对多线程支持、Java根本程根本程lJava中创建线程方法中创建线程方法l线程休眠过程线程休眠过程l线程生命周期线程生命周期l线程调度和优先级线程调度和优先级内 容 提 要 第8页多任务、多进程、多线程多任务、多进程、多线程v多线程和多任务是两个现有联络又有区分概念:多线程和多任务是两个现有联络又有区分概念:n多任务是针对操作系统而言,代表着操作系统能够同时运行多个应用程序(多进程),比如我们能够利用计算机边听音乐,边浏览网页,或者从网络上下载东西,等等。以前古老DOS操作系统(V 6.22)是单任务,还没有线程概念,系统在每次只能做一件事情。比如你在copy东西时候不能renam

8、e文件名。为了提升系统利用效率,采取批处理来批量执行任务。n现在操作系统都是多任务操作系统,每个运行任务就是操作系统所做一件事情,比如你在听歌同时还在用MSN和挚友聊天。听歌和聊天就是两个任务,这个两个任务是“同时”进行。一个任务普通对应一个进程,也可能包含好几个进程。比如运行MSN就对应一个MSN进程,假如你用是windows系统,你就能够在任务管理器中看到操作系统正在运行进程信息。第9页多任务、多进程、多线程多任务、多进程、多线程v多线程是针对一个程序而言,代表着一个程序内部能够同多线程是针对一个程序而言,代表着一个程序内部能够同时执行线程个数,而每个线程能够完成不一样任务。时执行线程个数

9、,而每个线程能够完成不一样任务。v普通来说,当运行一个应用程序时候,就开启了一个进程,普通来说,当运行一个应用程序时候,就开启了一个进程,当然有些会开启多个进程。开启进程时候,操作系统会为当然有些会开启多个进程。开启进程时候,操作系统会为进程分配资源,其中最主要资源是内存空间,因为程序是进程分配资源,其中最主要资源是内存空间,因为程序是在内存中运行。在进程中,有些程序流程块是能够乱序执在内存中运行。在进程中,有些程序流程块是能够乱序执行,而且这个代码块能够同时被屡次执行。实际上,这么行,而且这个代码块能够同时被屡次执行。实际上,这么代码块就是线程体。线程是进程中乱序执行代码流程。当代码块就是线

10、程体。线程是进程中乱序执行代码流程。当多个线程同时运行时候,这么执行模式成为并发执行。多个线程同时运行时候,这么执行模式成为并发执行。v多线程目标是为了最大程度利用多线程目标是为了最大程度利用CPUCPU资源。资源。第10页多任务、多进程、多线程多任务、多进程、多线程v对于一个进程中多个线程来说,多个线程共享进对于一个进程中多个线程来说,多个线程共享进程内存块,当有新线程产生时候,操作系统不分程内存块,当有新线程产生时候,操作系统不分配新内存,而是让新线程共享原有进程块内存。配新内存,而是让新线程共享原有进程块内存。所以,线程间通信很轻易,速度也很快。不一样所以,线程间通信很轻易,速度也很快。

11、不一样进程因为处于不一样内存块,所以进程之间通信进程因为处于不一样内存块,所以进程之间通信相对困难。相对困难。v实际上,操作系统多进程实现了多任务并发执行,实际上,操作系统多进程实现了多任务并发执行,程序多线程实现了进程并发执行。多任务、多进程序多线程实现了进程并发执行。多任务、多进程、多线程前提都是要求操作系统提供多任务、程、多线程前提都是要求操作系统提供多任务、多进程、多线程支持。多进程、多线程支持。第11页多任务、多进程、多线程多任务、多进程、多线程v归纳起来,操作系统能够同时执行多个任务,每归纳起来,操作系统能够同时执行多个任务,每个任务就是进程,进程能够同时执行多个任务,个任务就是进

12、程,进程能够同时执行多个任务,每个任务就是线程。每个任务就是线程。第12页l程序、进程、线程程序、进程、线程l多任务、多进程、多线程多任务、多进程、多线程lJava对多线程支持、对多线程支持、Java根本程根本程lJava中创建线程方法中创建线程方法l线程休眠过程线程休眠过程l线程生命周期线程生命周期l线程调度和优先级线程调度和优先级内 容 提 要 第13页Java对多线程支持对多线程支持v很多程序语言都是利用外部线程软件包来实现多线程。如很多程序语言都是利用外部线程软件包来实现多线程。如C C语言。语言。vJavaJava是是第一个第一个支持内置线程操作主流编程语言。支持内置线程操作主流编程

13、语言。JavaJava语言一大特征就语言一大特征就是内置对多线程支持。多线程指同时存在几个执行体,按几条不一样是内置对多线程支持。多线程指同时存在几个执行体,按几条不一样执行线索共同工作情况,它使得编程人员能够很方便地开发出含有多执行线索共同工作情况,它使得编程人员能够很方便地开发出含有多线程功效、能同时处理多个任务功效强大应用程序。线程功效、能同时处理多个任务功效强大应用程序。v即使执行线程给人一个几个事件同时发生感觉,但这只是一个错觉,即使执行线程给人一个几个事件同时发生感觉,但这只是一个错觉,因为我计算机在任何给定时刻只能执行那些线程中一个,为了建立这因为我计算机在任何给定时刻只能执行那

14、些线程中一个,为了建立这些线程正在同时执行感觉,些线程正在同时执行感觉,javajava快速地把控制从一个线程切换到另外快速地把控制从一个线程切换到另外一个线程多个线程执行是并发,也是一个逻辑上一个线程多个线程执行是并发,也是一个逻辑上“同时同时”,而不是物,而不是物理上理上“同时同时”。假如系统只有一个。假如系统只有一个CPUCPU,那么真正,那么真正“同时同时”是不可能,是不可能,不过因为不过因为CPUCPU速度非常快,用户感觉不到其中区分,我们也没必要去速度非常快,用户感觉不到其中区分,我们也没必要去关心它,只需要构想各个线程是同时执行即可。假如系统有多个关心它,只需要构想各个线程是同时

15、执行即可。假如系统有多个CPUCPU,能够实现真正,能够实现真正“同时同时”执行。执行。v在应用程序中使用多线程在应用程序中使用多线程不会不会增加增加CPUCPU数据处理能力。数据处理能力。第14页Java根本程根本程v普通常见普通常见JavaJava应用程序都是单线程。比如,用应用程序都是单线程。比如,用javajava命令运命令运行一个最简单行一个最简单HelloWorldHelloWorldJavaJava应用程序时,就开启了一个应用程序时,就开启了一个JVMJVM进程,进程,JVMJVM找到程序程序入口点找到程序程序入口点main()main(),然后运行,然后运行mainmain()

16、()方法,这么就产生了一个线程,这个线程称之为方法,这么就产生了一个线程,这个线程称之为“根本根本程程”。v当当JVMJVM加载代码,发觉加载代码,发觉mainmain方法之后,就会开启一个线程,方法之后,就会开启一个线程,这个线程称作这个线程称作“根本程根本程”,该线程负责执行,该线程负责执行mainmain方法。假方法。假如如mainmain中没有创建其它线程,那么当中没有创建其它线程,那么当mainmain方法执行完最终方法执行完最终一条语句,一条语句,JVMJVM就会结束我们就会结束我们javajava应用程序。假如应用程序。假如mainmain中中又创建了其它线程,那么又创建了其它线

17、程,那么JVMJVM就要在根本程和其它线程之就要在根本程和其它线程之间轮番切换,确保每个线程都有机会使用间轮番切换,确保每个线程都有机会使用CPUCPU资源,资源,mainmain方法即使执行完最终语句,方法即使执行完最终语句,JVMJVM也不会结束我们程序,也不会结束我们程序,JVMJVM一直等到程序中全部线程都结束之后,才结束我们一直等到程序中全部线程都结束之后,才结束我们javajava应应用程序用程序第15页Java根本程根本程第16页多线程优点多线程优点 v使用多线程进行程序设计含有以下优点:使用多线程进行程序设计含有以下优点:1)多多线线程程编编程程简简单单,效效率率高高(能能直直

18、接接共共享享数数据据和和资资源源,多进程不能)多进程不能)2)适合于开发服务程序(如适合于开发服务程序(如WebWeb服务,聊天服务等)服务,聊天服务等)3)适适合合于于开开发发有有各各种种交交互互接接口口程程序序(如如聊聊天天程程序序客客户户端端,网络下载工具)网络下载工具)4)减减轻轻编编写写交交互互频频繁繁、包包括括面面多多程程序序困困难难(如如监监听听网网络络端端口)口)5)程程序序吞吞吐吐量量会会得得到到改改进进(同同时时监监听听各各种种设设备备,如如网网络络端端口、串口、并口以及其它外设)口、串口、并口以及其它外设)6)有有多多个个处处理理器器系系统统,能能够够并并发发运运行行不不

19、一一样样线线程程(不不然然,任何时刻只有一个线程在运行)任何时刻只有一个线程在运行)第17页l程序、进程、线程程序、进程、线程l多任务、多进程、多线程多任务、多进程、多线程lJava对多线程支持、对多线程支持、Java根本程根本程lJava中创建线程方法中创建线程方法l线程休眠过程线程休眠过程l线程生命周期线程生命周期l线程调度和优先级线程调度和优先级内 容 提 要 第18页Java中创建线程方法中创建线程方法vJavaJava虚拟机允许应用程序并发地运行多个执行线程。虚拟机允许应用程序并发地运行多个执行线程。JavaJava语言提供了多线程编程扩展点,并给出了功效强大线程控语言提供了多线程编

20、程扩展点,并给出了功效强大线程控制制APIAPI。vJavaJava线程是经过线程是经过javajava软件包软件包java.langjava.lang中定义中定义ThreadThread类类来来实现。实现。vJavaJava中有两种方法创建线程:中有两种方法创建线程:n 继承Thread类。n 实现实现RunnableRunnable接口。接口。v不论使用哪种方法,都需要用到不论使用哪种方法,都需要用到JavaJava基础类库中基础类库中ThreadThread类类及其方法。及其方法。v在在JavaJava语言中,线程也是一个对象,但并非任何对象都能语言中,线程也是一个对象,但并非任何对象都

21、能够成为线程,只有实现够成为线程,只有实现RunnableRunnable接口或继承了接口或继承了ThreadThread类对类对象才能成为线程。象才能成为线程。第19页 Thread类类 vpublicclassThreadextendsObjectimplementsRunnablenThread类是一个详细类,即不是抽象类,该类封装了线程行为。要创建一个线程,程序员必须创建一个Thread类子类。nThread类提供了大量方法来方便控制各个线程。第20页Thread类结构方法类结构方法(1)public Thread():创建一个系统线程类对象。线程默认名是Thread-n,n是从0开始

22、递增整数。(2)public Thread(String name):在第一个结构方法基础上,为所创建线程对象指定一个字符串名称供以后使用。(3)public Thread(Runnable target):该结构方法包含 了Runnable类型参数,它是实现Runnable接口类实例对象,基于该结构方法创建线程对象,将线程业务逻辑交由参数所传递Runnable对象去实现。ntargettarget是实现了是实现了RunnableRunnable接口类接口类targettarget对象。对象。n线程默认名是线程默认名是Thread-nThread-n,n n是从是从0 0开始递增整数。开始递增

23、整数。第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页Thread类主要组员方法类主要组员方法 方法v 功效功效Cur

24、rentThread()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()使线程挂起,暂停运行Not Runnableresume()

25、resume()v恢复挂起线程,使处于可运行状态恢复挂起线程,使处于可运行状态vRunnableRunnableyield()yield()将CPU控制权主动移交到下一个可运行线程第23页Thread类主要方法类主要方法(续续)setName(String)setName(String)赋予线程一个名字getName()getName()v取得由取得由setName()setName()方法设置线程方法设置线程v名字字符串名字字符串getPriority()getPriority()返回线程优先级setPriority(int)setPriority(int)设置线程优先级join()join

26、()v当前线程等候调用该方法线程当前线程等候调用该方法线程结结v束后束后,再往下执行再往下执行setDaemon(boolean)setDaemon(boolean)v设置该线程是设置该线程是daemondaemon线程还是线程还是用户用户v线程,线程,DaemonDaemon线程也称服务线线程也称服务线程,程,v通常编成无限循环,在后台连通常编成无限循环,在后台连续运续运v行。行。第24页Thread类主要方法类主要方法(续续)v在上述方法中,在上述方法中,start()start()方法与方法与run()run()方法最为惯方法最为惯用,用,start()start()方法用于开启线程,方

27、法用于开启线程,run()run()方法为线方法为线程主体方法,能够依据需要重写程主体方法,能够依据需要重写run()run()方法。方法。第25页Thread类主要方法类主要方法(续续)vpublic void start()public void start()n开启线程,使该线程开始执行。开启线程,使该线程开始执行。n屡次开启一个线程是非法。尤其是当线程已经结束执屡次开启一个线程是非法。尤其是当线程已经结束执行后,不能再重新开启。行后,不能再重新开启。第26页Thread类主要方法类主要方法(续续)vpublic void run()public void run():nThreadTh

28、read子类应该重写该方法,内容为该线程应执行任子类应该重写该方法,内容为该线程应执行任务。务。第27页Thread类主要方法类主要方法(续续)vpublic final void setPriority(int newPriority)n线程执行是一个抢占方式,优先级高比优先级低要取得更多执行时间,假如想让一个线程比其它线程有更多时间运行,能够经过设置线程优先级处理。n如一个线程创建后,能够经过调用setPriority()方法来设置其优先级。nnewPriority是一个1-10之间正整数,数值越大,优先级越高,系统有一些常数值:1 1MAX_PRIORITYMAX_PRIORITY:最高

29、优先级(值为:最高优先级(值为1010)2 2MIN_PRIORITYMIN_PRIORITY:最低优先级(值为:最低优先级(值为1 1)3 3NORM_PRIORITYNORM_PRIORITY:默认优先级(值为:默认优先级(值为5 5)v线程创建时,继承了父线程优先级。父线程是指执行创建新线程对象语句线程,它可能是根本程,也可能是用户自己定义线程。v普通情况下,根本程含有默认优先级。第28页Thread类主要方法类主要方法(续续)vpublic final int getPriority()public final int getPriority()n返回线程优先级。返回线程优先级。v在线

30、程创建之后,能够经过在线程创建之后,能够经过getPriority()getPriority()方法得方法得到线程优先级,也能够经过到线程优先级,也能够经过setPriority()setPriority()方法改方法改变线程优先级。变线程优先级。第29页Thread类主要方法类主要方法(续续)vpublic final String getName()public final String getName()vpublic final void setName(Stringname)public final void setName(Stringname)v每个线程在创建时可认为其指定名称,

31、如果未指每个线程在创建时可认为其指定名称,如果未指定,则由系统进行指定。对于根本程名称是:定,则由系统进行指定。对于根本程名称是:mainmain。对于其他线程,默认名称样式是:。对于其他线程,默认名称样式是:“Thread-“Thread-数字数字”。v可以使用可以使用ThreadThread类类getName()getName()方法获得线程名,使方法获得线程名,使用用setName()setName()方法设置线程名。方法设置线程名。v不一样线程可以有相同名称,不能使用线程名来不一样线程可以有相同名称,不能使用线程名来区分线程。区分线程。第30页Thread类主要方法类主要方法(续续)v

32、public long getId()public long getId()n每个线程在创建时会被分配一个每个线程在创建时会被分配一个IDID属性,能够使用属性,能够使用ThreadThread类类getID()getID()方法取得线程方法取得线程IDID。ThreadThread类并没有提类并没有提供修改供修改IDID方法。方法。n该方法返回该线程标识符。线程该方法返回该线程标识符。线程 ID ID 是一个正是一个正 long long 数,在创建该线程时生成。线程数,在创建该线程时生成。线程 ID ID 是唯一,并终生是唯一,并终生不变。线程终止时,该线程不变。线程终止时,该线程 ID

33、ID 能够被重新使用。能够被重新使用。v不一样线程不能有相同不一样线程不能有相同IDID,系统是使用,系统是使用IDID值来区值来区分线程。分线程。第31页方法方法1:继承:继承Thread类创建线程类创建线程vJava.langJava.lang包中包中ThreadThread类,是一个专门用来创建线程类,类,是一个专门用来创建线程类,该类中提供了线程所用到属性和方法,该类中提供了线程所用到属性和方法,这个类已经具备这个类已经具备了创建和运行线程全部必要架构,经过重写了创建和运行线程全部必要架构,经过重写ThreadThread类中类中runrun()()方法,以实现用户所需要功效,实例化自

34、定义方法,以实现用户所需要功效,实例化自定义ThreadThread类,使用类,使用start()start()方法开启线程。方法开启线程。第32页方法方法1:继承:继承Thread类创建线程类创建线程经过创建经过创建ThreadThread类子类来实现多线程。类子类来实现多线程。步骤以下:步骤以下:1.1.设计设计ThreadThread类子类,重写父类类子类,重写父类run()run()方法。方法。class myThread extends Thread class myThread extends Thread public void run()public void run()/添加

35、你自己线程代码添加你自己线程代码 第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

36、.start();/thread1.start();/使用使用start()start()方法开启线程。当方法开启线程。当JVMJVM将将CPUCPU使用权切换给线程时,会自动执行使用权切换给线程时,会自动执行run()run()方法。方法。注意:线程开启是需要一个创建它进程,比如上面开启线注意:线程开启是需要一个创建它进程,比如上面开启线程代码能够写在一个程代码能够写在一个main()main()方法里面,运行时实际上有方法里面,运行时实际上有两个线程,一个是根本程,一个是名为两个线程,一个是根本程,一个是名为“线程线程1”1”线程,线程,这两个线程同时运行。这两个线程同时运行。第34页【例

37、例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 com

38、pute1();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;i1

39、0;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

40、+)System.out.println(this.getName()+:+i);System.out.println(this.getName()+:+i);在使用java语言编写多线程程序时,运行结果与操作系统亲密相关,即使在同一台机器上,屡次运行同一个程序,结果也可能不一样。实际上全部多线程代码执行次序都是不确定,每次执行结果都是随机。第35页【例例2:(书例(书例10-1)】继承继承Thread类创建线程类创建线程/继承Tread类public class MyThread extends Thread/count变量用于统计打印次数并共享变量private static int co

41、unt=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

42、+;System.out.println(count+:+this.getName();第36页【例例3】继承继承Thread类创建线程类创建线程classSimpleThreadextendsThreadprivateStringname;publicSimpleThread(Stringname)this.name=name;publicvoidrun()/线程要执行逻辑操作线程要执行逻辑操作for(inti=0;i10;i+)System.out.print(this.name);trysleep(1000);/睡眠睡眠1秒钟,方便观察线程执行结果秒钟,方便观察线程执行结果catch(I

43、nterruptedExceptione)e.printStackTrace();publicclassThreadDemo1publicstaticvoidmain(Stringargs)SimpleThreadthread1=newSimpleThread(张张);/创建线程对象实例创建线程对象实例SimpleThreadthread2=newSimpleThread(李李);SimpleThreadthread3=newSimpleThread(王王);thread1.start();/开启线程开启线程thread2.start();/开启线程开启线程thread3.start();/开

44、启线程开启线程第37页方法方法1:继承继承Thread类创建线程类创建线程v当线程类继承当线程类继承ThreadThread类时,直接使用类时,直接使用thisthis即可获即可获取当前线程。取当前线程。v运行多线程程序时不要忘了运行多线程程序时不要忘了javajava程序运行时默认程序运行时默认根本程,根本程,main()main()方法方法体就是根本程线程执行方法方法体就是根本程线程执行体。体。v使用继承使用继承ThreadThread类方法来创建线程类时,多个线类方法来创建线程类时,多个线程之间无法共享线程类实例变量。程之间无法共享线程类实例变量。第38页方法方法2:实现Runnable

45、接口创建线程v因为因为javajava语言仅支持单重继承,所以当定义线程需要继语言仅支持单重继承,所以当定义线程需要继承多个类时用上述方法就无法实现,这时,就需要采取承多个类时用上述方法就无法实现,这时,就需要采取javajava提供另外一个定义线程方法提供另外一个定义线程方法-实现实现RunnableRunnable接口。接口。它是在结构线程过程中可能出现多重继承问题一个处理它是在结构线程过程中可能出现多重继承问题一个处理方案。方案。v实现实现RunnableRunnable接口类就能够成为线程,接口类就能够成为线程,ThreadThread类就是因类就是因为实现了为实现了RunnableR

46、unnable接口所以才含有了线程功效接口所以才含有了线程功效vRunnableRunnable接口位于接口位于java.langjava.lang包中,这个接口非常简单,包中,这个接口非常简单,仅定义了一个仅定义了一个run()run()方法方法,接口定义以下:,接口定义以下:public interface Runnablepublic interface Runnablepublic abstract void run();public abstract void run();第39页方法方法2:实现Runnable接口创建线程v该该接接口口只只定定义义了了一一个个方方法法runrun(

47、),所所以以必必须须在在新新类类中中实实现现它它。不不过过RunnableRunnable接接口口并并没没有有任任何何对对线线程程支支持持,我我们们还还必必须须创创建建ThreadThread类类实实例例,这这一一点点经经过过ThreadThread类结构方法类结构方法 public Thread(Runnable target);public Thread(Runnable target);来实现。来实现。第40页方法方法2:实现Runnable接口创建线程v在java中,线程是一个对象,不是全部对象都能够称为线程,只有实现了Runnable接口类才能够称为线程。v实现Runnable接口创

48、建新线程步骤以下:1.1.新建一个类,该类实现了新建一个类,该类实现了RunnableRunnable接口并重写接口并重写run()run()方法。方法。重写重写runrun()()方法中包含要在新线程中运行代码。方法中包含要在新线程中运行代码。class MyRunnable implements Runnable public void run()/把你任务代码写在这里 第41页方法方法2:实现Runnable接口创建线程2.2.在在main()main()方法中使用刚才新编写类创建方法中使用刚才新编写类创建RunnableRunnable接口接口类型对象。类型对象。MyRunnable

49、r=new MyRunnable();MyRunnable r=new MyRunnable();3.3.在在main()main()方法中创建一个方法中创建一个ThreadThread类对象类对象t t,结构方法参,结构方法参数就是第数就是第2 2步创建步创建MyRunnableMyRunnable类对象类对象r r,如:,如:Thread t=new Thread(r);Thread t=new Thread(r);第42页方法方法2:实现Runnable接口创建线程4.4.为线程命名,如:为线程命名,如:t.setName(“t.setName(“我线程我线程”);”);/可选可选5.5

50、.调用Thread类start()方法来运行新线程。如:如:t.strat();t.strat();n经过这种方法开启一个名为经过这种方法开启一个名为“我线程我线程”线程,该线程执线程,该线程执行行MyRunnableMyRunnable类类runrun方法中代码。方法中代码。第43页【例例1】实现Runnable接口创建线程/创建两个线程,让其交替运行创建两个线程,让其交替运行publicclassthreadtestpublicstaticvoidmain(Stringargs)computec=newcompute();compute1c1=newcompute1();Threadt=n

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服