Java与面向对象程序设计实验教程全套电子课件完整版ppt整本书电子教案最全教学教程整套课件.ppt
《Java与面向对象程序设计实验教程全套电子课件完整版ppt整本书电子教案最全教学教程整套课件.ppt》由会员分享,可在线阅读,更多相关《Java与面向对象程序设计实验教程全套电子课件完整版ppt整本书电子教案最全教学教程整套课件.ppt(542页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象的程序设计第第7章章线程线程面向对象的程序设计对外经济贸易大学 雷擎content7.1多线程基础多线程基础7.2线程的生命周期线程的生命周期7.3生产者与消费者问题生产者与消费者问题实验:多线程实验:多线程面向对象的程序设计对外经济贸易大学 雷擎7.1多线程基础多线程基础o7.1.1线程的概念线程的概念o7.1.2Thread类和类和Runnable接口接口o7.1.3在程序中实现多线程在程序中实现多线程面向对象的程序设计对外经济贸易大学 雷擎7.1.1线程的概念线程的概念o线程和进程都是指正在执行的程序代码,是线程和进程都是指正在执行的程序代码,是与计算机中的并发执行相关的概念。与
2、计算机中的并发执行相关的概念。o通过操作系统的调度,多个进程和线程可以通过操作系统的调度,多个进程和线程可以同时、独立的执行。同时、独立的执行。面向对象的程序设计对外经济贸易大学 雷擎o线程与进程的区别线程与进程的区别:n多个进程的内部数据和状态都是完全独立的多个进程的内部数据和状态都是完全独立的,而而多线程是共享一块内存空间和一组系统资源多线程是共享一块内存空间和一组系统资源,有有可能互相影响可能互相影响.n线程本身的数据通常只有寄存器数据,以及一线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。进程切
3、换的负担要小。o多线程是多线程是Java的内嵌特性,的内嵌特性,Java虚拟机虚拟机允许应用程序并发地运行多个执行线程。允许应用程序并发地运行多个执行线程。线程与进程的区别线程与进程的区别面向对象的程序设计对外经济贸易大学 雷擎7.1.2Thread类和类和Runnable接接oJava中实现多线程有两种途径:继承中实现多线程有两种途径:继承Thread类或者实现类或者实现Runnable接口。接口。Thread类实现类实现Runnable接口。接口。面向对象的程序设计对外经济贸易大学 雷擎创建线程的方式创建线程的方式1.继承类继承类Threadpublicclassmythreadexten
4、dsThread2.实现实现Runnable接口接口publicclassmythreadextendsSuperClassimplementsRunnable上述两种方法中都可用类上述两种方法中都可用类Thread产生线程的对象产生线程的对象Threadnewthread;面向对象的程序设计对外经济贸易大学 雷擎定义一个定义一个Thread类的子类类的子类o步骤:步骤:n1.定义定义一个一个Thread类的子类,类的子类,并并overriderun()方法,在这个方法里是你希望这个线程运行方法,在这个方法里是你希望这个线程运行的代码的代码n2.创建一个这个新类的对象创建一个这个新类的对象n3
5、.调用调用Thread对象的对象的start()方法来启动线方法来启动线程程面向对象的程序设计对外经济贸易大学 雷擎实现实现Runnable接口接口o步骤:步骤:n1.定义一个类,实现定义一个类,实现Runnalbe接口,并接口,并overriderun()方法,在这个方法里是你希方法,在这个方法里是你希望这个线程运行的代码望这个线程运行的代码n2.创建一个这个新类的对象创建一个这个新类的对象n3.创建一个创建一个Thread类的对象,用刚才的类的对象,用刚才的Runnable对象作为构造函数参数对象作为构造函数参数n4.调用调用Thread对象的对象的start()方法来启动线方法来启动线程
6、程面向对象的程序设计对外经济贸易大学 雷擎7.1.3在程序中实现多线程在程序中实现多线程o一个龟兔赛跑的例子,使用线程模拟了龟兔一个龟兔赛跑的例子,使用线程模拟了龟兔在在1000米赛跑过程。米赛跑过程。面向对象的程序设计对外经济贸易大学 雷擎1.定义一个定义一个Thread类的子类类的子类classRunnerextendsThreadStringname;doubledistance;Randomrand=newRandom();publicRunner(Stringname)this.name=name;面向对象的程序设计对外经济贸易大学 雷擎publicvoidrun()distance
7、=0.0;for(inti=0;i10;i+)distance+=100.0;intsleepTime=rand.nextInt(2000);System.out.println(name+跑了跑了+distance+米米t休息休息+sleepTime+毫秒毫秒);tryThread.sleep(sleepTime);catch(InterruptedExceptioninte)System.out.println(name+跑到了终点跑到了终点);面向对象的程序设计对外经济贸易大学 雷擎使用定义好的使用定义好的Runner线程线程importjava.util.Random;publiccl
8、assDemoThreadSimplepublicstaticvoidmain(Stringargs)/创建并命名每个线程创建并命名每个线程Runnerrabbit=newRunner(rabbit);Runnertortoise=newRunner(“tortoise”);rabbit.setPriority(Thread.NORM_PRIORITY);tortoise.setPriority(Thread.NORM_PRIORITY+5);rabbit.start();/启动线程启动线程1tortoise.start();/启动线程启动线程1面向对象的程序设计对外经济贸易大学 雷擎2.实现
9、实现Runnable接口接口classJumpBeanimplementsRunnableprivateintsleepTime;publicJumpBean()/构造方法构造方法sleepTime=(int)(Math.random()*6000);/获得随机休息毫秒数获得随机休息毫秒数面向对象的程序设计对外经济贸易大学 雷擎数组元素初始化的例子数组元素初始化的例子intaI;aI=newint10;StringaS;aS=newString3;CircleaC;aC=newCircle5;intk=0;for(k=0;k10;k+)aIk=k*k;aS0=aaa;aS1=newString
10、(bbb);aS3=newString(ccc);for(k=0;k5;k+)aCk=newCircle();面向对象的程序设计对外经济贸易大学 雷擎publicvoidrun()trySystem.out.println(Thread.currentThread().getName()+goingtosleepfor+sleepTime);/区别区别:因为不是继承因为不是继承Thread类,因而必须先调用类,因而必须先调用currentThread方法方法Thread.sleep(sleepTime);/线程休眠线程休眠catch(InterruptedExceptionexception)
11、System.out.println(Thread.currentThread().getName()+finished);/运行结束,给出提示信息运行结束,给出提示信息面向对象的程序设计对外经济贸易大学 雷擎构造并发执行的线程构造并发执行的线程publicclassDemoRunnableSimplepublicstaticvoidmain(Stringargs)/创建创建3个实现个实现Runnable接口类的对象接口类的对象JumpBeanthread1=newJumpBean();JumpBeanthread2=newJumpBean();JumpBeanthread3=newJumpB
12、ean();System.out.println(Startingthreads);/分别以三个对象为参数创建三个新线程,第二个参数为新线程命名并启动之分别以三个对象为参数创建三个新线程,第二个参数为新线程命名并启动之newThread(thread1,jumpbeanOne).start();newThread(thread2,jumpbeanTwo).start();newThread(thread3,jumpbeanThree).start();System.out.println(Threadsstarted,mainendsn);面向对象的程序设计对外经济贸易大学 雷擎publicc
13、lassMyArraypublicstaticvoidmain(Stringargs)intmyArray;/声明数组声明数组myArray=newint10;/创建数组创建数组System.out.println(IndexttValue);for(inti=0;imyArray.length;i+)System.out.println(i+tt+myArrayi);/证明数组元素默认初始化为证明数组元素默认初始化为0/myArray10=100;/将产生数组越界异常将产生数组越界异常数组引用例子数组引用例子面向对象的程序设计对外经济贸易大学 雷擎3.线程的优先权线程的优先权oJava的线程
14、调度的优先级为的线程调度的优先级为1-10的整数,的整数,优先级随数的大小增减。优先级随数的大小增减。Thread类设置了类设置了特定的级别:特定的级别:nMIN-PRIORITYnNOM_PRIORITYnMAX-PRIORITYo某一时刻只有一个线程在执行某一时刻只有一个线程在执行,调度策略为调度策略为固定优先级调度固定优先级调度.nnewthread.setPriority(Thread.MIN_PRIORITY)面向对象的程序设计对外经济贸易大学 雷擎7.2线程的生命周期线程的生命周期o线程的生命周期是线程从产生到终止的全过线程的生命周期是线程从产生到终止的全过程,一个线程在任何时刻都
15、处于某种线程状程,一个线程在任何时刻都处于某种线程状态。态。o一个线程的生命周期由线程类、新线程一个线程的生命周期由线程类、新线程(NewThread)、就绪状态()、就绪状态(Ready)、)、运行状态(运行状态(Running)、阻塞状态)、阻塞状态(Blocked)、等待状态()、等待状态(Waiting)和)和定时等待状态(定时等待状态(TimedWaiting)和终止)和终止状态(状态(Terminated)。)。面向对象的程序设计对外经济贸易大学 雷擎面向对象的程序设计对外经济贸易大学 雷擎7.3生产者与消费者问题生产者与消费者问题o生产者与消费者问题是从操作系统中的许多生产者与消
16、费者问题是从操作系统中的许多实际同步问题中抽象出来的具有代表性的问实际同步问题中抽象出来的具有代表性的问题,反映了操作系统中典型的同步例子。题,反映了操作系统中典型的同步例子。o生产者生产消息,放入消息缓冲区;消费者生产者生产消息,放入消息缓冲区;消费者从消息缓冲区中获取消息,使用消息。从消息缓冲区中获取消息,使用消息。面向对象的程序设计对外经济贸易大学 雷擎同步关系同步关系o生产者线程与消费者线程之间存在的同步关生产者线程与消费者线程之间存在的同步关系如下:系如下:n同一时刻只能有一个生产者或者一个消费者访同一时刻只能有一个生产者或者一个消费者访问消息缓冲区。问消息缓冲区。n当消息缓冲区为空
17、时,消费者等待生产者生产当消息缓冲区为空时,消费者等待生产者生产消息;当消息缓冲区满时,生产者等待消费者消息;当消息缓冲区满时,生产者等待消费者消费消息。消费消息。面向对象的程序设计对外经济贸易大学 雷擎关键问题关键问题o生产者与消费者问题实现中的关键问题有:生产者与消费者问题实现中的关键问题有:n缓冲区采用数组实现的循环队列:缓冲区空的缓冲区采用数组实现的循环队列:缓冲区空的条件为条件为rear=front,缓冲区为满的条件为,缓冲区为满的条件为(rear+1)%size=front;n随机数对象随机数对象Randomrand=newRandom()用于产生线程等待的随机毫秒数;用于产生线程
18、等待的随机毫秒数;n线程的退出:处于运行状态的线程通过置线程的退出:处于运行状态的线程通过置toStop标志为标志为true使线程从使线程从run()方法返回;方法返回;处于等待状态的线程由于无法自己醒过来,需处于等待状态的线程由于无法自己醒过来,需要置要置toStop标志为标志为true,主程序唤醒它们之,主程序唤醒它们之后才能检测到后才能检测到toStop标志。标志。面向对象的程序设计对外经济贸易大学 雷擎面向对象的程序设计对外经济贸易大学 雷擎小结小结7.1多线程基础多线程基础7.2线程的生命周期线程的生命周期7.3生产者与消费者问题生产者与消费者问题面向对象的程序设计对外经济贸易大学
19、雷擎知识点提示:知识点提示:o理解理解n线程的概念线程的概念n线程和进程的区别线程和进程的区别nJava多线程实现的机制多线程实现的机制n消费者和生产者的原理消费者和生产者的原理o掌握掌握n利用利用Thread和和Runnable实现多线程程序实现多线程程序面向对象的程序设计对外经济贸易大学 雷擎实验:多线程实验:多线程o实验实验11:多线程:多线程面向对象的程序设计EndofChapter7面向对象的程序设计第第1章章Java概述概述面向对象的程序设计对外经济贸易大学 雷擎content1.1Java语言的发展和特点语言的发展和特点1.2Java虚拟机及虚拟机及java的跨平台原理的跨平台原
20、理1.3Java开发环境开发环境1.4第一个应用程序第一个应用程序1.5Java开发工具介绍开发工具介绍面向对象的程序设计对外经济贸易大学 雷擎1.1Java语言的发展语言的发展o计算机语言的发展历史计算机语言的发展历史oJava语言的发展语言的发展oJava语言的特点语言的特点面向对象的程序设计对外经济贸易大学 雷擎计算机语言的发展历史计算机语言的发展历史语言语言o什么是语言什么是语言?n语言是人与人交流的工具语言是人与人交流的工具(媒介媒介)o什么是计算机语言什么是计算机语言?n人与计算机交流的工具人与计算机交流的工具n程序员之间交流的工具程序员之间交流的工具面向对象的程序设计对外经济贸易
21、大学 雷擎计算机语言分类计算机语言分类o机器语言机器语言130004277414005934191200274027o汇编语言汇编语言LOADbADDaSTOREco高级程序设计语言高级程序设计语言c=a+bn编译编译n解释解释机器的表示方式、机器的处理流程人的表示方式、机器的处理流程人的表示方式、人的处理流程面向对象的程序设计对外经济贸易大学 雷擎高级语言发展历史高级语言发展历史o第一阶段:以第一阶段:以FORTRAN,COBOL等为代等为代表,主要用于工程或商业计算;表,主要用于工程或商业计算;(50s)o第二阶段:以第二阶段:以Pascal,C,Ada等为代表,等为代表,支持结构化程序设
22、计的思想;支持结构化程序设计的思想;(60s-70s)o第三阶段:以第三阶段:以Smalltalk,C+,Java等等为代表,支持为代表,支持面向对象的程序设计思想面向对象的程序设计思想;(80s-)面向对象的程序设计对外经济贸易大学 雷擎java的产生的产生面向对象的程序设计对外经济贸易大学 雷擎Java的产生的产生oBirthday:May23,1995o1991:Set-Topbox:JamesGoslingo1994:OAKandFirstPersono1995:javaandHotJavaInternetplay面向对象的程序设计对外经济贸易大学 雷擎Java发展回顾发展回顾o199
23、5年年5月月23日日Sun正式发布正式发布Java和和HotJava浏览器。浏览器。o1995年年9月月Sun宣布将提供宣布将提供Java开发工具。开发工具。o1995年年Netscape、Oracle公司、公司、Borland公司、公司、SGI公司、公司、Adobe公司、公司、IBM公司、公司、AT&T公司、公司、Intel公司获得公司获得Java许可证。许可证。o1995年年12月月Sun和和Netscape发布发布JavaScript,Sun、Netscape和和SGI宣布缔结软件联盟,以开发宣布缔结软件联盟,以开发Java和和Internet三三维和多媒体交互性工具。维和多媒体交互性工
24、具。o1996年年1月月Sun宣布成立新的业务部门宣布成立新的业务部门JavaSoft部,推出部,推出Java开发工具包开发工具包JDK(JavaDevelopmentKit)1.0o1996年年2月月Sun发布发布Java芯片系列,包括芯片系列,包括picoJava,microJava和和UltraJava。Sun推出推出Java数据库联接数据库联接JDBC数据库数据库API。o1997年年3月月Sun推出推出JDK1.1.1。3月月17日日Sun向国际标准化组织向国际标准化组织的第一联合技术委员会的第一联合技术委员会(JTC-1)申请成为申请成为Java的公开有效规范的公开有效规范(PAS
25、)的提案者。的提案者。面向对象的程序设计对外经济贸易大学 雷擎Java语言的特点语言的特点o简单简单o面向对象面向对象o分布式分布式o执行解释与平台无关执行解释与平台无关o可靠性与安全性可靠性与安全性o可移植性可移植性o结构中立性结构中立性o支持多线程支持多线程o动态性动态性面向对象的程序设计对外经济贸易大学 雷擎Java类库类库o组成组成Java程序的最小单位是类,类封装了程序的最小单位是类,类封装了数据与处理数据的方法。数据与处理数据的方法。o对于大多数常用的功能,有大量已经编译好、对于大多数常用的功能,有大量已经编译好、经过测试的类,这些类的集合就是经过测试的类,这些类的集合就是Java
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 程序设计 实验 教程 全套 电子 课件 完整版 ppt 教案 教学 整套
链接地址:https://www.taowenge.com/p-72346610.html
限制150内