版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章注解和多线程第一单元第1页/共33页本章相关学习资源《注解》专题《多线程处理》专题《使用Java高级实用技术》第4章《注解和多线程》学习平台“Java高级特性”课程学生用书第2页/共33页预习检查注解有哪几类?读取注解信息使用哪个接口?线程的生命周期包括哪几个状态?线程同步的方式有哪两个?关键字是什么?提问第3页/共33页本章任务使用注解描述程序代码使用多线程输出1~100的整数使用线程同步实现银行取款通过线程间通信解决生产消费者问题第4页/共33页会使用内建注解和自定义注解会读取注解信息实现线程同步实现线程调度本章目标创建和启动线程点重理解注解和线程的概念点难实现线程通信点难点难第5页/共33页点重讲解:注解AnnotationinJDK5.0---将元数据引入Java元数据:描述数据的数据元数据的用处:文档编制、编译器检查、代码分析等元数据Java注解:Java代码里的特殊标记。它为在代码中添加用Java程序无法表达的额外信息提供了一种形式化的方法。注释不会被程序所读取注解可以在编译、类加载、运行时被读取注释注解第6页/共33页串讲:注解的分类内建注解元注解自定义注解三类注解标准注解类型,如:@Override、@SuppressWarnings修饰其他的注解定义,如:@Target、@Retention注解类型是一种接口使用关键字@interface定义第7页/共33页串讲:内建注解标准注解类型(位于java.lang包下)限定重写父类方法:@Override标示已过时:@Deprecated抑制编译器警告:@SuppressWarnings@DeprecatedpublicvoidgetObjectInfo(){System.out.println("苹果重写水果的getObjectInfo方法");}publicclassFruit{publicvoidgetObjectInfo(){…}}publicclassAppleextendsFruit{@OverridepublicvoidgetObjectInfo(){…}}使用@Override指定下面的方法是重写父类方法第8页/共33页使用@Deprecated指定下面的方法已过时串讲:内建注解标准注解类型抑制编译器警告:@SuppressWarnings带一个参数:@注解名(value="值")带多个参数:@注解名(value="值","值",…)@SuppressWarnings可以修饰类、方法、语句@SuppressWarnings(value="unchecked");publicclassFruit{……}使用@SuppressWarnings抑制编译器警告信息参数“unchecked”表示:执行了未检查的转换第9页/共33页上机练习需求说明定义Person类,包含姓名属性(name)和打招呼的方法(sayHi())。其中name属性标识为已过时定义学生类(Student)继承Person类,使用注解限定重写sayHi()方法在main()方法中实例化两个学生对象,并使用注解抑制对象未使用的编译器警告信息完成时间:10分钟共性问题集中讲解练习第10页/共33页串讲:元注解四个元注解类型@Target指定被其修饰的注解能用于修饰哪些程序元素成员变量value为ElementType枚举类型@Retention指定该注解可使用反射读取成员变量value:RetentionPolicy枚举类型@Documented指定被其修饰的注解将被JavaDoc工具提取成文档@Inherited指定被其修饰的注解将具有继承性第11页/共33页串讲:自定义注解自定义注解使用@interface关键字声明注解也可以带成员变量public@interfaceAnnotationTest1{}public@interfaceAnnotationTest2{StringtypeCon();}注解中以无参数方法的形式来声明成员变量public@interfaceDataBaseType3{ StringtypeConn()default"SQL";}使用default关键字为注解类型的成员变量指定初始值@Target(METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceDataBaseType3{ StringtypeConn()default"SQL";}使用元数据注解@Target来指定该注解仅作用于方法使用元数据注解@Retention来指定该注解可使用反射读取第12页/共33页串讲:使用自定义注解使用注解默认情况下,注解可用于修饰任何程序元素,如类、接口、方法和成员变量等规范注解单独放在一行注解放在所有修饰符之前@AnnotationTest1publicclassMyAnnotation{...}@AnnotationTest2publicclassMyAnnotation{...}@AnnotationTest2(type=“oracle”)publicclassMyAnnotation{...}@AnnotationTest3publicclassMyAnnotation{...}使用默认值注解修饰类第13页/共33页串讲:读取注解信息java.lang.reflect.AnnotatedElement接口指定了程序中可以接受注解的程序元素读取注解信息的方法getAnnotation(Class<T>annotationClass)返回该程序元素上存在的、指定类型的注解,如果该类型的注解不存在,则返回nullAnnotation[]getAnnotations()返回该程序元素上存在的所有注解@Retention注解的value成员变量的值设为RetentionPolicy.RUNTIME演示示例:自定义注解和读取注解信息第14页/共33页上机练习需求说明自定义注解,只能修饰方法,包含一个成员变量age,有默认值20定义Person类,包含验证年龄的方法,使用自定义注解修饰,在此方法中读取注解中的年龄信息并进行判断,如果年龄在18岁以下,提示“未成年”,否则,提示“具备选举权”定义测试类完成时间:10分钟共性问题集中讲解练习第15页/共33页小结内建注解包含哪几个?作用分别是什么?自定义注解的语法是什么?读取注解信息使用的接口和方法是什么?提问第16页/共33页讲解:进程与线程系统运行程序的基本单位有独立的内存空间和系统资源进程进程中执行运算的最小单位处理机分配给线程,即真正在处理机上运行的是线程线程第17页/共33页串讲:线程的创建和启动在Java中创建线程的两种方式继承java.lang.Thread类实现java.lang.Runnable接口使用线程的步骤1.定义线程2.创建线程对象3.启动线程4.终止线程第18页/共33页上机练习需求说明创建线程,输出1~100之间的偶数。要求使用两种方式创建线程分析继承java.lang.Thread类实现java.lang.Runnable接口完成时间:15分钟共性问题集中讲解练习第19页/共33页讲解:线程的状态线程的生命周期包括四个状态:新生状态、可运行状态、阻塞状态和死亡状态第20页/共33页讲解:线程调度多个线程处于可运行状态分配优先级:反映线程的重要或紧急程度线程的优先级用1~10表示,1的优先级最高,默认值是5更改优先级setPriority(intgrade)方法myThread.setPriority(3);线程调度的方法join()方法sleep()方法yield()方法第21页/共33页讲解:线程调度—join()方法使用join()方法调度线程publicfinalvoidjoin();publicfinalvoidjoin(longmills);publicfinalvoidjoin(longmills,intnanos);语法阻塞指定的线程等到另一个线程完成以后再继续执行演示示例:使用join()方法调度线程第22页/共33页讲解:线程调度—sleep()方法使用sleep()方法调度线程publicstaticvoidsleep(long
millis);当前线程在指定毫秒内停止执行而转入不可运行状态publicvoidrun(){for(inti=0;i<5;i++){ ……}try{
Thread.sleep(10000);//等待10秒}catch(InterruptedExceptione){e.printStackTrace();}}演示示例:使用sleep()方法调度线程第23页/共33页讲解:线程调度—yield()方法使用yield()方法调度线程publicstaticvoidyield();当前线程转入暂时停止运行的状态sleep()与yield()的区别sleep()yield()使当前线程进入被阻塞的状态将当前线程转入暂停执行的状态即使没有其他等待运行的线程,当前线程也会等待指定的时间如果没有其他等待执行的线程,当前线程会马上恢复执行其他等待执行的线程的机会是均等的会将优先级相同或更高的线程运行演示示例:使用yield()方法调度线程第24页/共33页上机练习需求说明定义一个线程A,输出1~10之间的整数,定义一个线程B,逆序输出1~10之间的整数,要求线程A和线程B交替输出分析使用sleep()方法阻塞当前线程完成时间:10分钟共性问题集中讲解练习第25页/共33页串讲:线程同步线程同步当两个或多个线程需要访问同一资源时,需要以某种顺序来确保该资源某一时刻只能被一个线程使用1同步方法(synchronized)2同步代码块(synchronized)如何实现线程同步?提问演示示例:实现线程同步第26页/共33页上机练习需求说明张三和妻子各拥有一张银行卡和存折,可以对同一个银行账户进行存取款的操作,请使用多线程及同步方法模拟张三和妻子同时取款的过程。要求使用同步方法和同步代码块两种方式实现分析定义Account类表示银行帐户定义两个线程分别实现张三和妻子取款的操作完成时间:15分钟共性问题集中讲解练习第27页/共33页串讲:线程通信方法Java实现线程通信的方法wait()方法挂起当前线程,并释放共享资源的锁notify()方法在因调用该对象的wait()方法而阻塞的线程中随机选择一个解除阻塞,但要等到获得锁后才可真正执行notifyAll()方法将因调用该对象的wait()方法而阻塞的所有线程一次性全部解除阻塞这三个方法只能在同步方法或者同步代码块中使用演示示例:实现线程通信第28页/共33页上机练习需求说明使用线程通信解决生产消费者问题分析定义共享资源类定义生产者线程类定义消费者线程类完成时间:20分钟共性问题集中讲解练习第29页/共33页答疑时间同学们请就以下方面的问题请教老师(教员备课时自行填写)第30页/共33页总结简述三个内建注解的作用。定义注解的成员变量的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《兒童視力保健》课件
- 《抗菌药物概论课件》课件
- 蜂产品课件蜂产品中抗生素残留现状及检测
- 保险基础知识课件-保险的性质、功能及作用
- 奥数鸡兔同笼课件
- 地理信息系统的应用课件
- 曲线积分与曲面积分习题课课件
- 2.1 立在地球边上放号 课件(共37张)
- 植物提取物生产线项目可行性研究报告模板-立项备案
- 2024年全国爱耳日活动方案(34篇)
- 消防管道施工合同
- 大学生计算与信息化素养-北京林业大学中国大学mooc课后章节答案期末考试题库2023年
- 2023年中国社会科学院外国文学研究所专业技术人员招聘3人(共500题含答案解析)笔试历年难、易错考点试题含答案附详解
- 2023年广东石油化工学院公开招聘部分新机制合同工20名高频考点题库(共500题含答案解析)模拟练习试卷
- 2023年国开大学期末考复习题-3987《Web开发基础》
- 《骆驼祥子》1-24章每章练习题及答案
- 《伊利乳业集团盈利能力研究》文献综述3000字
- 货车安全隐患排查表
- 《战略三环 规划 解码 执行》读书笔记思维导图PPT模板下载
- 减盐防控高血压培训课件
- 2023年百一测评-房地产企业岗位招聘工程副总经理笔试试题
评论
0/150
提交评论