书签 分享 收藏 举报 版权申诉 / 22
上传文档赚钱

类型java高级编程2课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3347483
  • 上传时间:2022-08-22
  • 格式:PPT
  • 页数:22
  • 大小:327.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《java高级编程2课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    java 高级 编程 课件
    资源描述:

    1、Java多线程多线程第1页,共22页。Java 线程模型v理解线程概念 进程的概念线程的概念线程与进程的区别和联系v一个进程在其执行过程中,可以产生多个线程。v在进程概念中,每一个进程的内部数据和状态都是完全独立的。但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。第2页,共22页。v线程是比进程更小的执行单位,是进程内部独立的,有序的指令流。由此,一个进程能包含多个并发执行的线程。线程是一种能够独立运行的子任务。v多线程是一种允许在程序中并发执行彼此间互相独立的多个线程机制。v多个线程的执行是并发的

    2、。v多个线程之间的代码是乱序执行的,由此线程调度,同步等问题需要进行特殊处理。第3页,共22页。1.线程的生命周期线程的5种状态及转换方法 新生态Now Bron运行态Running可运行态Runnable阻塞态Blocked死亡态Deadsuspend()sleep()wait()resume()notify()start()yield()stop()stop()stop()第4页,共22页。1.新生状态新生状态v当利用new运算符创建线程对象实例后,它仅仅作为一个对象实例存在,JVM没有为其分配CPU时间片等线程运行资源,该线程处于新生状态。2.可运行状态可运行状态v在处于新生状态的线程中

    3、调用start()方法将线程的状态转换为可运行状态。这时,线程已经得到除CPU时间之外的其它系统资源,只等JVM的线程调度管理器按照线程的优先级对该线程进行调度,从而使该线程拥有能够获得CPU时间片的机会。3.运行状态运行状态vJVM的线程调度管理器选中一个可运行状态线程,使其占有CPU并转换为运行状态。运行状态的线程执行自己的run()方法中的代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。第5页,共22页。4.睡眠状态睡眠状态v处于运行状态的线程在某些情况下,如执行了sleep()方法,或等待I/O设备等资源,将让出CPU并暂时终止自己的运行,进入阻塞状态,也称为不可运行

    4、状态。v处于阻塞状态的线程是不可执行的,即使CPU空闲,也不能执行。只有当引起阻塞的原因被消除时,线程转入可运行状态,重新进入线程队列中排队等待运行,再次运行时从原来终止处继续运行。5.死亡状态死亡状态v死亡状态是线程生命周期中的最后一个阶段。导致线程死亡的有2种情况:一是正常运行的线程完成了它的全部工作,这个任务完成的动作是由run()方法实现的;另一个是线程被强制性地终止,如通过执行stop()方法来终止一个线程。v可以用isAlive()方法测试线程是否已启动。如果isAlive()方法返回false,表示该线程是新创建或已被终止;如果返回true,表示该线程已启动且未被终止,是可运行状

    5、态、运行状态或阻塞状态之一,但不能作进一步的分辨。第6页,共22页。2.线程控制(1)start()方法vstart()方法对应于启动操作(2)stop()方法vstop()方法终止在任何状态的线程,使之转入到死亡状态(3)sleep()方法vsleep()方法使线程暂停运行一段固定的时间。在休眠时间内,由于线程不能得到CPU 时间而不运行,指定的时间一过,线程重新进入可运行状态。vpublic static void sleep(long millis)throws InterruptedExceptionvpublic static void sleep(long millis,int n

    6、anos)throws InterruptedException(4)yield()方法vyield()方法使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可运行状态,随时可能再次分得CPU时间 第7页,共22页。(5)wait()方法vwait()方法使得当前线程进入阻塞状态,直到被唤醒或等够了timeout指定的时间。注意:wait()等价于wait(0),它使得线程永远等待直到被唤醒为止。vpublic final void wait(long timeout)throws InterruptedExceptionvpublic final void wait(long

    7、timeout,int nanos)throws InterruptedExceptionvpublic final void wait()throws InterruptedException(6)notify()方法和notifyAll()方法vnotify()方法和notifyAll()方法对应于唤醒操作。(7)suspend()方法和resume()方法vsuspend()方法和resume()方法配套使用,suspend()方法使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()方法被调用,才能使得线程重新进入可执行状态。第8页,共22页。(8)interrupt()

    8、方法和interrupted()方法 interrupt()方法为线程设置一个中断标记,以便于run()方法运行时使用isInterrupted()方法能够检测到,此时,线程在sleep()之类的方法中被阻塞时,由sleep()方法抛出一个InterruptedException异常,然后捕获这个异常以处理超时。(9)isAlive()方法 isAlive()方法用来判断一个线程的run()方法是否还在执行,如果是在运行,则返回true,否则返回false。第9页,共22页。3.线程的创建v在Java中创建线程的方法有2种:一是通过创建Thread类的子类来实现,二是通过实现Runnable接

    9、口的类来实现。v用 继 承 T h r e a d 类 的 子 类 或 通 过 实 现Runnable接口的类来创建线程无本质的区别。但是由于Java语言不允许多重继承,所以,如果类已经继承了别的类,这样它就不能再继承Thread了。这时,就要用Runnable接口的方式。第10页,共22页。(1)Thread类与Runnable接口vThread类用于创建和控制线程。一个线程必须从run()方法开始执行,而run()方法声明在java.lang.Runnable接口中。vRunnable接口中只声明了一个run()方法。任何实现Runnable接口的对象都可以作为一个线程的目标对象。v一个线

    10、程对象必须实现run()方法来完成线程的所有活动,已实现的run()方法称为该对象的线程体。第11页,共22页。vThread类在java.lang包中定义,Thread类的构造方法如下:(1)Thread()(2)Thread(Runnable target)(3)Thread(Runnable target,String name)(4)Thread(String name)(5)Thread(ThreadGroup group,Runnable target)(6)Thread(ThreadGroup group,Runnable target,String name)(7)Thread

    11、(ThreadGroup group,String name)v任何实现Runable接口的对象对可以作为Thread类构造方法中的target参数,而Thread类本身也实现了Runable接口。因此,可以有2种方式提供run()方法来实现多线程。第12页,共22页。(2)继承Thread类实现多线程vThread类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程:Thread类包含了线程运行所需要的方法,当一个类继承了Thread类后就可以在重写父类中的run()方法来执行指定的操作。需要注意的是线程子类的对象需要通过调用自己的start()方法让线程执行,start()

    12、方法会自动调用run()方法。第13页,共22页。例 通过继承Thread实现多线程public class SimpleThread extends Thread int count=1,number;public SimpleThread(int num)number=num;System.out.println(创建线程 +number);public void run()while(true)System.out.println(线程 +number+:计数 +count);if(+count=4)return;public static void main(String args)f

    13、or(int i=0;i 3;i+)new SimpleThread(i+1).start();第14页,共22页。(3)通过Runnable接口实现多线程 用Runnable接口创建线程 实现线程的另外一种方法是通过使用Thread类的一个构造方法public Thread(Runnable target)来创建一个新的线程,其中创建参数target的类负责实现Runnable接口。Runnable接口中只有一个run()方法,实现该接口的类必须实现接口中的run()方法,在其中定义具体操作,然后将实现了Runnable接口的类的对象作为参数创建一个Thread类的对象,调用该Thread类

    14、对象的start()方法启动线程。第15页,共22页。例 通过实现Runnable接口实现多线程public class Runnable1 implements Runnable int k=0;public Runnable1(int k)this.k=k;public void run()int i=k;while(i50)System.out.print(i+);i+=2;public static void main(String args)Runnable1 r1=new Runnable1(1);/创建具有线程体的目标对象 Runnable1 r2=new Runnable1(2

    15、);Thread t1=new Thread(r1);/以目标对象创建线程 Thread t2=new Thread(r2);t1.start();t2.start();for(int i=0;i40;i+)System.out.print(A);第16页,共22页。v两种线程实现方式的对比分析 通过继承Thread类来实现多线程的编程这种方法简单明了,但是它也有一个很大的缺点,那就是如果相应的多线程处理类已经继承了一个类,便无法再继承Thread这个类,所以我们一般情况下采用Runnable接口的方法来实现多线程的编程。使用Runnable接口的来实现多线程在开发过程中能够在一个类中包容所有

    16、的代码,以便封装。但是使用Runnable接口的方法的缺点在于如果想创建多个线程并使各个线程执行不同的的代码,就必须创建额外的类,这样的话在某些情况下不如直接用多个类分别继承Thread紧凑。第17页,共22页。18线程的优先级v线程的优先级用数字来表示,范围从1到10,即Thread.MIN_PRIORITY到Thread.MAX_PRIORITY。一个线程的缺省优先级是5,即Thread.NORM_PRIORITY。vint getPriority();vvoid setPriority(int newPriority);第18页,共22页。19class ThreadTest publi

    17、c static void main(String args )Thread t1=new MyThread(T1);t1.setPriority(Thread.MIN_PRIORITY);t1.start();Thread t2=new MyThread(T2);t2.setPriority(Thread.MAX_PRIORITY);t2.start();Thread t3=new MyThread(T3);t3.setPriority(Thread.MAX_PRIORITY);t3.start();第19页,共22页。20class MyThread extends Thread String message;MyThread(String message)this.message=message;public void run()for(int i=0;i3;i+)System.out.println(message+getPriority();第20页,共22页。21运行结果:T2 10T2 10T2 10T3 10T3 10T3 10T1 1T1 1 T1 1第21页,共22页。22v注意:并不是在所有系统中运行Java程序时都采用时间片策略调度线程,所以一个线程在空闲时应该主动放弃CPU,以使其他同优先级和低优先级的线程得到执行。第22页,共22页。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:java高级编程2课件.ppt
    链接地址:https://www.163wenku.com/p-3347483.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库