java课程总结实用教案

上传人:pu****.1 文档编号:569991790 上传时间:2024-08-01 格式:PPT 页数:33 大小:534KB
返回 下载 相关 举报
java课程总结实用教案_第1页
第1页 / 共33页
java课程总结实用教案_第2页
第2页 / 共33页
java课程总结实用教案_第3页
第3页 / 共33页
java课程总结实用教案_第4页
第4页 / 共33页
java课程总结实用教案_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《java课程总结实用教案》由会员分享,可在线阅读,更多相关《java课程总结实用教案(33页珍藏版)》请在金锄头文库上搜索。

1、14-1 Java的多线程机制(jzh) 多线程机制是JavaJava语言的又一重要(zhngyo)(zhngyo)特征,使用多线程技术可以使系统同时运行多个执行体,这样可以加快程序的响应时间,提高计算机资源的利用率。使用多线程技术可以提高整个应用系统的性能。 第1页/共32页第一页,共33页。14-1-1 线程的生命周期 每个JavaJava程序都有一个主线程,即main()main()方法对应的线程。要实现多线程,必须在主线程中创建新的线程。在JavaJava语言中,线程用ThreadThread类及其子类的对象来表示。每个线程要经历由“新生(xnshng)(xnshng) 就绪 运行 阻

2、塞 死亡”5”5种状态,线程从新生(xnshng)(xnshng)到死亡的状态变化过程称为生命周期。 第2页/共32页第二页,共33页。线程的生命周期线程的生命周期新生(xnshng)就绪(jix)阻塞(zs)运行死亡第3页/共32页第三页,共33页。1新生(xnshng)状态 用newnew关键字和ThreadThread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过(tnggu)(tnggu)调用startstart方法进入就绪状态。 第4页/共32页第四页,共33页。2就绪(jix)状态 处于就绪状态的线程已经具备了运行条件,但还没有分配

3、到CPUCPU,因而将进入线程队列(duli)(duli),等待系统为其分配CPUCPU。一旦获得CPUCPU,线程就进入运行状态并自动调用自己的runrun方法。 第5页/共32页第五页,共33页。3运行(ynxng)状态 在运行状态的线程执行自己的runrun方法中代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务(rn wu)(rn wu)而死亡。 第6页/共32页第六页,共33页。4阻塞状态 处于(chy)(chy)运行状态的线程在某些情况下,如执行了sleepsleep(睡眠)方法,或等待I/OI/O设备等资源,将让出CPUCPU并暂时终止自己的运行,进入阻塞状态。 在阻塞状

4、态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/OI/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待CPUCPU资源。当再次获得CPUCPU时,便从原来终止位置开始继续运行。 第7页/共32页第七页,共33页。5死亡(swng)状态 死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它的全部工作(gngzu)(gngzu);另一个是线程被强制性地终止,如通过执行stopstop或destroydestroy方法来终止一个线程。 第8页/共32页第八页,共33页。14-1-2 多线程的实现(shxin)方法在J

5、avaJava中,创建线程的方法有两种:通过创建ThreadThread类的子类来实现(shxin)(shxin);通过实现(shxin)Runnable(shxin)Runnable接口的类来实现(shxin)(shxin)。 第9页/共32页第九页,共33页。14-2 通过(tnggu)Thread类实现多线程 通过继承ThreadThread类实现多线程的方法(fngf)(fngf)是首先设计ThreadThread的子类,然后根据工作需要重新设计线程的runrun方法(fngf)(fngf),再使用startstart方法(fngf)(fngf)启动线程,将执行权转交到runrun。

6、第10页/共32页第十页,共33页。Java实例实例(shl)通过通过Thread类类 /通过继承( jchng)Thread类实现多线程 class Thread1 extends Thread String s; int m, count=0; Thread1(String ss, int mm) s=ss; m=mm; public void run() try while (true) System.out.print(s); sleep(m); count+; 第11页/共32页第十一页,共33页。Java实例实例(shl)(续)(续) if (count = 20) break;

7、(s+finished !); catch(InterruptedException e) return; public static void main(String args) Thread1 threadA = new Thread1(A , 50); Thread1 threadB = new Thread1(B , 100); (); (); 第12页/共32页第十二页,共33页。运行(ynxng)该程序的输出结果如下所示:A B A B A A B A A B A A B A A B A A B A A B A A B A A B A A B A finished !B B B B

8、 B B B B B B finished !第13页/共32页第十三页,共33页。14-3 通过(tnggu)Runnable接口实现多线程 通过RunnableRunnable接口实现多线程的方法:设计一个实现RunnableRunnable接口的类,然后根据工作需要重新设计线程的runrun方法;建立该类的对象,以此对象为参数建立ThreadThread类的对象;调用ThreadThread类对象的startstart方法启动(qdng)(qdng)线程,将执行权转交到runrun方法。 第14页/共32页第十四页,共33页。Java实例实例(shl)通过通过Runnable接口接口 /

9、通过Runnable接口(ji ku)实现多线程 class Thread2 implements Runnable String s; int m, count=0; Thread2(String ss, int mm) s=ss; m=mm; public void run() try while (true) System.out.print(s); Thread.sleep(m); if (+count = 20) break; 第15页/共32页第十五页,共33页。Java实例实例(shl)(续)(续) (s+has finished !); catch (InterruptedEx

10、ception e) return; public static void main(String args) Thread2 threadA = new Thread2(A , 50); Thread2 threadB = new Thread2(B , 100); Thread threadC=new Thread(threadA); Thread threadD=new Thread(threadB); (); (); 第16页/共32页第十六页,共33页。运行该程序(chngx)的输出结果如下所示:A B A B A A B A A B A A B A A B A A B A A B

11、A A B A A B A A B A has finished !B B B B B B B B B B has finished !第17页/共32页第十七页,共33页。14-4 线程等待(dngdi) Java程序中的线程并发运行,共同争抢CPU资源。哪个(n ge)线程抢夺到CPU资源后,就开始运行。 线程的调度执行是按照其优先级高低的顺序进行的,为了防止高级线程未完成,低级线程没有机会获得CPU,使低级线程有机会执行,那么让高级线程暂时休眠一段时间,使用sleep()方法,休眠时间的长短由sleep()方法中的参数决定。第18页/共32页第十八页,共33页。Java实例实例(shl)

12、线程等待线程等待 例:各线程的并发(bngf)执行 class Thread3 extends Thread String s; int m, i=0; Thread3(String ss) s=ss; public void run() try for( i=0; i6; i+) sleep(int)(500*Math.random(); (s); 第19页/共32页第十九页,共33页。Java实例实例(shl)(续)(续) (s+finished !); catch(InterruptedException e) return; public static void main(String

13、 args) Thread3 threadA = new Thread3(A ); Thread3 threadB = new Thread3(B ); (); (); (main is finished); 第20页/共32页第二十页,共33页。main is finishedBAABABABBABB finished !AA finished !第21页/共32页第二十一页,共33页。例:join()方法(fngf)的功能 class Thread4 extends Thread String s; int m, i=0; Thread4(String ss) s=ss; public v

14、oid run() try for( i=0; i6; i+) sleep(int)(500*Math.random(); (s); (s+finished !); catch(InterruptedException e) return; 第22页/共32页第二十二页,共33页。public static void main(String args) Thread4 threadA = new Thread4(A ); Thread4 threadB = new Thread4(B ); (); try (); catch(InterruptedException e) (); (main

15、is finished); 第23页/共32页第二十三页,共33页。运行该程序(chngx)的输出结果如下所示:AAAAAAA finished !main is finishedBBBBBBB finished !第24页/共32页第二十四页,共33页。14-5 线程同步(tngb) Java提供了多线程机制,通过多线程的并发运行可以(ky)提高系统资源利用率,改善系统性能。但在有些情况下,一个线程必须和其他线程合作才能共同完成任务。线程可以(ky)共享内存,利用这个特点可以(ky)在线程之间传递信息。 在Java中,实现同步操作的方法是在共享内存变量的方法前加synchronized修饰符

16、。在程序运行过程中,如果某一线程调用经synchronized修饰的方法,在该线程结束此方法的运行之前,其他所有线程都不能运行该方法,只有等该线程完成此方法的运行后,其他线程才能y运行该方法。 第25页/共32页第二十五页,共33页。例:线程并发(bngf)引起的不确定性 class Cbank private static int s=2000; public static void sub(int m) int temp=s; temp=temp-m; try (int)(1000*Math.random(); catch (InterruptedException e) s=temp;

17、(s=+s); 第26页/共32页第二十六页,共33页。class Customer extends Thread public void run() for( int i=1; i=4; i+) (100); public class Thread5 public static void main(String args) Customer customer1 = new Customer(); Customer customer2 = new Customer(); customer1.start(); customer2.start(); 第27页/共32页第二十七页,共33页。其中一次

18、运行(ynxng)的显示结果:s=1900s=1800s=1900s=1700s=1800s=1700s=1600s=1600第28页/共32页第二十八页,共33页。Java实例实例(shl)线程同步线程同步例:线程的同步(tngb)class Cbankprivate static int s=2000;public synchronized static void sub(int m) int temp=s; temp=temp-m; try Thread.sleep(int)(1000*Math.random(); catch (InterruptedException e) s=tem

19、p; (s=+s); 第29页/共32页第二十九页,共33页。Java实例实例(shl)(续)(续)class Customer extends Thread public void run() for( int i=1; i=4; i+) Cbank.sub(100); public class Thread5 public static void main(String args) Customer customer1 = new Customer(); Customer customer2 = new Customer(); customer1.start(); customer2.st

20、art(); 第30页/共32页第三十页,共33页。该程序(chngx)的运行结果如下:s=1900s=1800s=1700s=1600s=1500s=1400s=1300s=1200第31页/共32页第三十一页,共33页。感谢您的观看(gunkn)!第32页/共32页第三十二页,共33页。内容(nirng)总结14-1 Java的多线程机制。第1页/共32页。通过实现Runnable接口的类来实现。/通过继承Thread类实现多线程。Java实例(续)。/通过Runnable接口实现多线程。Java实例线程等待。线程可以共享内存,利用这个特点可以在线程之间传递信息。temp=temp-m。Java实例线程同步(tngb)。第31页/共32页。感谢您的观看第三十三页,共33页。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号