第九讲多线程优秀PPT.ppt
《第九讲多线程优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第九讲多线程优秀PPT.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九讲多线程第一页,本课件共有72页第九讲 JAVA多线程机制9.7 在同步方法中使用在同步方法中使用wait()、notify 和和notifyAll()方法方法9.8 挂起、恢复和终止线程挂起、恢复和终止线程9.9 计时器线程计时器线程Timer9.10 线程联合线程联合9.11 守护线程守护线程第二页,本课件共有72页第九讲 JAVA多线程机制 教学目的:教学目的:学习学习java中线程的使用,掌握线程的调中线程的使用,掌握线程的调度和控制方法,清楚地理解多线程的互斥和度和控制方法,清楚地理解多线程的互斥和同步的实现原理,以及多线程的应用。掌握同步的实现原理,以及多线程的应用。掌握线程之
2、间的相互调度关系,尤其是通过线程线程之间的相互调度关系,尤其是通过线程睡眠来使其它线程获得执行机会的机制,以睡眠来使其它线程获得执行机会的机制,以及互斥和同步的实现机制。及互斥和同步的实现机制。第三页,本课件共有72页第九讲 JAVA多线程机制 教学内容:教学内容:1.线程的基本概念;线程的基本概念;2.线程的状态与生命周期;线程的状态与生命周期;3.线程的创建;线程的创建;4.线程的调度与线程控制;线程的调度与线程控制;5.线程同步等相关内容。线程同步等相关内容。重点及难点重点及难点 1.多线程的调度和控制。多线程的调度和控制。2.多线程的互斥和同步。多线程的互斥和同步。第四页,本课件共有7
3、2页9.1 Java中的线程 一、程序、进程、线程简介一、程序、进程、线程简介 1、程序、程序:是用某种语言编写的是用某种语言编写的、完成特定任务的、完成特定任务的、一组指令的一组指令的集合。指一段静态的代码。集合。指一段静态的代码。2、进程、进程:进程是程序的一次动态执行过程,它对应了从代码加载、进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比进程更小的执行单位产生、发展至消亡的过程。线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程,形
4、成一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。产生、存在和消亡的过程,也是一个动态的概念。第五页,本课件共有72页 3、线线程程:是是进进程程中中的的一一个个实实体体,是是被被系系统统独独立立调调度度和和分分派派的的基基本本单单位位,线线程程自自己己基基本本不不拥拥有有系系统统资资源源,只只拥拥有有一一点点在在运运行行中中必必不不可可少少的的资资源源(如如:程程序序计计数数器器,一一组组寄寄存存器器和和栈)栈)执行执行就绪就绪等待等待CPU挂起挂起第六页,本
5、课件共有72页9.1 Java中的线程4、进程与线程的区别、进程与线程的区别1)线程的划分尺度小于进程)线程的划分尺度小于进程。2)多个线程是共享内存单元的,而进程在执)多个线程是共享内存单元的,而进程在执行过程中拥有自己独立的内存单元。行过程中拥有自己独立的内存单元。3)线程自己基本不拥有系统资源,只拥有一线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源,而进程要运行点在运行中必不可少的资源,而进程要运行必须获得有可能需要的所有资源必须获得有可能需要的所有资源。第七页,本课件共有72页9.1 Java中的线程5、线程的调度方法、线程的调度方法1)调度策略调度策略时间片时间片轮转式
6、轮转式抢占式:高优先级的线程抢占抢占式:高优先级的线程抢占CPU 2)Java的调度方法的调度方法对高优先级,使用优先调度的抢占式策略。对高优先级,使用优先调度的抢占式策略。同优先级线程,使用时间片策略。同优先级线程,使用时间片策略。12第八页,本课件共有72页9.1 Java中的线程 二、线程的状态与生命周期二、线程的状态与生命周期 要想实现线程,必须在主线程中创要想实现线程,必须在主线程中创建新的线程对象建新的线程对象,在线程的一个完整的生命在线程的一个完整的生命周期中通常要经历如下的五种状态周期中通常要经历如下的五种状态:1、新建:、新建:当当一个线程刚创建时的状态。一个线程刚创建时的状
7、态。2、就绪:处于、就绪:处于新建新建状态的线程被启动后状态的线程被启动后的状态。的状态。第九页,本课件共有72页9.1 Java中的线程 3、运行:当就绪的线程被调度并获得运行:当就绪的线程被调度并获得CPU时的状态。时的状态。4、阻塞:在某种特殊情况下,被人为阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出挂起或执行输入输出操作时,让出CPU临时中止自己的执行,进入的状态。临时中止自己的执行,进入的状态。5、死亡:线程完成了它的全部工作自动终、死亡:线程完成了它的全部工作自动终止或线程被提前强制性地中止的状态。止或线程被提前强制性地中止的状态。(stop()或或destroy(
8、))第十页,本课件共有72页线程的生命周期图线程的生命周期图第十一页,本课件共有72页线程的状态转移图线程的状态转移图CPU调度 I/O完成sleep时间到新建状态新建状态new Thread(.)就绪状态就绪状态start()等待状态等待状态执行状态执行状态I/Osleep()run()结束stop()yield()消亡消亡第十二页,本课件共有72页9.1 Java中的线程 三、启动线程三、启动线程 线程创建后仅仅是占有了内存资源,在线程创建后仅仅是占有了内存资源,在JVM管理的线程中还没有这个线程,此线程管理的线程中还没有这个线程,此线程必须调用必须调用start()方法(从父类继承的方法
9、)()方法(从父类继承的方法)通知通知JVM,这样,这样JVM就会知道又有一个新一就会知道又有一个新一个线程排队等候切换了。个线程排队等候切换了。第十三页,本课件共有72页例9.1public class Example9_1 public static void main(String args)Lefthand left;Righthand right;left=new Lefthand();/创建线程创建线程 right=new Righthand();left.start();right.start();for(int i=1;i=6;i+)System.out.println(我是主
10、线程我是主线程);第十四页,本课件共有72页class Lefthand extends Thread public void run()for(int i=1;i=9;i+)System.out.println(我是左手线程);第十五页,本课件共有72页class Righthand extends Thread public void run()for(int i=1;i=9;i+)System.out.println(我是右手线程);第十六页,本课件共有72页9.2 Java中线程的实现 Java的线程是通过的线程是通过java.lang.Thread类类来实现的。当我们生成一个来实现的
11、。当我们生成一个Thread类的对象类的对象之后之后,一个新的线程就产生了。而每个线程都一个新的线程就产生了。而每个线程都是通过类是通过类Thread(在(在Java的软件包的软件包Java.lang中定义)的构造方法创建的。构中定义)的构造方法创建的。构造方法如下:造方法如下:public Thread(ThreadGroup group,Runnable target,String name););第十七页,本课件共有72页9.2 Java中线程的实现 当上述构造方法的某个参数为当上述构造方法的某个参数为null时,我们可得时,我们可得到下面的几个构造方法:到下面的几个构造方法:vpubl
12、ic Thread();();vpublic Thread(Runnable target););vpublic Thread(Runnable target,String name););vpublic Thread(String name););vpublic Thread(ThreadGroup group,Runnable target););vpublic Thread(ThreadGroup group,String name););第十八页,本课件共有72页9.2 Java中线程的实现 一、线程的创建方法一、线程的创建方法(一)(一)Thread的子类创建线程的子类创建线程 1)
13、定义一个线程类,它继承线程类)定义一个线程类,它继承线程类Thread 2)重写其中的方法)重写其中的方法run()。这时在初始化这个类的实例时,目标这时在初始化这个类的实例时,目标target可为可为null,表示由这个实例对象来执行线程,表示由这个实例对象来执行线程体。体。第十九页,本课件共有72页9.2 Java中线程的实现3)方法说明:)方法说明:v编写编写Thread类的子类时,需要重写父类的类的子类时,需要重写父类的run方法,其目的是规定线程的具体操作,否方法,其目的是规定线程的具体操作,否则线程就什么也不做,因为父类的则线程就什么也不做,因为父类的run方法中方法中没有任何操作
14、语句。没有任何操作语句。v当当JVM将将CPU使用权切换给线程时,如果线使用权切换给线程时,如果线程是程是Thread的子类创建的,该类中的的子类创建的,该类中的run方方法就立刻执行。法就立刻执行。第二十页,本课件共有72页例9.2public class Example9_2 public static void main(String args)People teacher,student;ComputerSum sum=new ComputerSum();teacher=new People(老师老师,200,sum);student=new People(学生学生,200,sum);
15、teacher.start();student.start();第二十一页,本课件共有72页class ComputerSum int sum;public void setSum(int n)sum=n;public int getSum()return sum;第二十二页,本课件共有72页class People extends Thread int timeLength;/线程休眠的时间长度 ComputerSum sum;People(String s,int timeLength,ComputerSum sum)setName(s);/调用Thread类的方法 setName为线程起
16、个名字 this.timeLength=timeLength;this.sum=sum;第二十三页,本课件共有72页public void run()for(int i=1;i=5;i+)int m=sum.getSum();sum.setSum(m+1);System.out.println(“我是我是”+getName()+“,现现 在的和在的和:+sum.getSum();try sleep(timeLength);catch(InterruptedException e)第二十四页,本课件共有72页9.2 Java中线程的实现(二)(二)使用Runable接口 1)定义一个类,实现)定
17、义一个类,实现Runnable接口,并接口,并override run()方法,而方法,而run()中是你希望这中是你希望这个线程运行的代码;个线程运行的代码;2)创建这个新类的对象;)创建这个新类的对象;3)创建一个)创建一个Thread类的对象,用刚才的类的对象,用刚才的Runnable对象作为构造函数的参数;对象作为构造函数的参数;4)调用)调用Thread 对象的对象的start()方法来启动线方法来启动线程。程。第二十五页,本课件共有72页9.2 Java中线程的实现5)方法说明)方法说明v创建线程的另一个途径就是用创建线程的另一个途径就是用Thread类直接创建线程类直接创建线程对
18、象。使用对象。使用Thread创建线程对象时,通常使用的构创建线程对象时,通常使用的构造方法是:造方法是:v Thread(Runnable target)v该构造方法中的参数是一个该构造方法中的参数是一个Runnable类型的接口,类型的接口,因此,在创建线程对象时必须向构造方法的参数传递一因此,在创建线程对象时必须向构造方法的参数传递一个实现个实现Runnable接口类的实例,该实例对象称作所创接口类的实例,该实例对象称作所创线程的目标对象。线程的目标对象。v当线程调用当线程调用start方法后,一旦轮到它来享用方法后,一旦轮到它来享用CPU资资源,目标对象就会自动调用接口中的源,目标对象
19、就会自动调用接口中的run方法(接方法(接口回调)。口回调)。v 第二十六页,本课件共有72页例9.3public class Example9_3 public static void main(String args)Bank bank=new Bank();/线程的目标对象设置被线程共享的线程的目标对象设置被线程共享的money bank.setMoney(300);bank.会计会计.start();bank.出纳出纳.start();第二十七页,本课件共有72页class Bank implements Runnable private int money=0;Thread 会计会计
20、,出纳出纳;Bank()会计会计=new Thread(this);会计会计.setName(会计会计);出纳出纳=new Thread(this);/会计和出纳的目标对象相同会计和出纳的目标对象相同 出纳出纳.setName(出纳出纳);public void setMoney(int mount)money=mount;第二十八页,本课件共有72页public void run()/接口中的方法接口中的方法 while(true)money=money-50;if(Thread.currentThread()=会计会计)System.out.println(“我是我是”+会计会计.getN
21、ame()+现在有现在有:+money+元元);if(money=150)System.out.println(会计会计.getName()+进入死亡状态进入死亡状态);return;/如果如果money少于少于50,会计的会计的run方法结束方法结束 第二十九页,本课件共有72页else if(Thread.currentThread()=出纳出纳)System.out.println(我是我是+出纳出纳.getName()+现在有现在有:+money+元元);if(money=12)return;第三十七页,本课件共有72页9.4线程的常用方法 5、currentThread()curre
22、ntThread()方法是()方法是Thread类中类中的类方法,可以用类名调用,该方法返回的类方法,可以用类名调用,该方法返回当前正在使用当前正在使用CPU资源的线程。资源的线程。6、interrupt()intertupt方法经常用来方法经常用来“吵醒吵醒”休眠的休眠的线程。当一些线程调用线程。当一些线程调用sleep方法处于休眠方法处于休眠状态时,一个占有状态时,一个占有CPU资源的线程可以让资源的线程可以让休眠的线程调用休眠的线程调用interrupt 方法方法“吵醒吵醒”自自己。己。第三十八页,本课件共有72页例9.9public class Example9_9 public st
23、atic void main(String args)A a=new A();a.student.start();a.teacher.start();第三十九页,本课件共有72页class A implements Runnable Thread student,teacher;A()teacher=new Thread(this);student=new Thread(this);teacher.setName(王教授);student.setName(张三);第四十页,本课件共有72页public void run()if(Thread.currentThread()=student)tr
24、y System.out.println(student.getName()+正在睡觉,不听课正在睡觉,不听课);Thread.sleep(1000*60*60);catch(InterruptedException e)System.out.println(student.getName()+被老师叫醒了被老师叫醒了);System.out.println(student.getName()+开始听课开始听课);第四十一页,本课件共有72页else if(Thread.currentThread()=teacher)for(int i=1;i=3;i+)System.out.println(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 多线程 优秀 PPT
限制150内