欢迎来到天天文库
浏览记录
ID:57060397
大小:68.00 KB
页数:32页
时间:2020-07-30
《《java程序设计》课件 第14章多线程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十四章多线程14-1Java的多线程机制多线程机制是Java语言的又一重要特征,使用多线程技术可以使系统同时运行多个执行体,这样可以加快程序的响应时间,提高计算机资源的利用率。使用多线程技术可以提高整个应用系统的性能。14-1-1线程的生命周期每个Java程序都有一个主线程,即main()方法对应的线程。要实现多线程,必须在主线程中创建新的线程。在Java语言中,线程用Thread类及其子类的对象来表示。每个线程要经历由“新生就绪运行阻塞死亡”5种状态,线程从新生到死亡的状态变化过程称为生命周期。线程
2、的生命周期新生就绪阻塞运行死亡1.新生状态用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。2.就绪状态处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,因而将进入线程队列,等待系统为其分配CPU。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。3.运行状态在运行状态的线程执行自己的run方法中代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。4.阻塞状态处于运行状态
3、的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时终止自己的运行,进入阻塞状态。在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待CPU资源。当再次获得CPU时,便从原来终止位置开始继续运行。5.死亡状态死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它的全部工作;另一个是线程被强制性地终止,如通过执行stop或destroy方法
4、来终止一个线程。14-1-2多线程的实现方法在Java中,创建线程的方法有两种:通过创建Thread类的子类来实现;通过实现Runnable接口的类来实现。14-2通过Thread类实现多线程通过继承Thread类实现多线程的方法是首先设计Thread的子类,然后根据工作需要重新设计线程的run方法,再使用start方法启动线程,将执行权转交到run。Java实例—通过Thread类//通过继承Thread类实现多线程classThread1extendsThread{Strings;intm,count=0;
5、Thread1(Stringss,intmm){s=ss;m=mm;}publicvoidrun(){try{while(true){System.out.print(s);sleep(m);count++;Java实例——(续)if(count>=20)break;}System.out.println(s+"finished!");}catch(InterruptedExceptione){return;}}publicstaticvoidmain(Stringargs[]){Thread1threadA=
6、newThread1("A",50);Thread1threadB=newThread1("B",100);threadA.start();threadB.start();}}运行该程序的输出结果如下所示:ABABAABAABAABAABAABAABAABAABAABAfinished!BBBBBBBBBBfinished!14-3通过Runnable接口实现多线程通过Runnable接口实现多线程的方法:设计一个实现Runnable接口的类,然后根据工作需要重新设计线程的run方法;建立该类的对象,以此对象为
7、参数建立Thread类的对象;调用Thread类对象的start方法启动线程,将执行权转交到run方法。Java实例——通过Runnable接口//通过Runnable接口实现多线程classThread2implementsRunnable{Strings;intm,count=0;Thread2(Stringss,intmm){s=ss;m=mm;}publicvoidrun(){try{while(true){System.out.print(s);Thread.sleep(m);if(++count>=
8、20)break;}Java实例——(续)System.out.println(s+"hasfinished!");}catch(InterruptedExceptione){return;}}publicstaticvoidmain(Stringargs[]){Thread2threadA=newThread2("A",50);Thread2threadB=newThread2("B
此文档下载收益归作者所有