反射机制-多线程和并发线程

1.反射机制介绍_Class对象获取
(1)反射机制的常见作用是什么?
1)动态的加载类、动态的获取类的信息(属性、方法、构造器)
2)动态构造对象
3)动态调用类和对象的任意方法、构造器
4)动态调用和处理属性
5)获取泛型信息
6)处理注解
(2)获取Class对象的方式有哪些?
//获取Class的三种方式
User u = new User();
//1通过对象.getClass方式获取
Class c1 = u.getClass();
//2通过字节码文件获取
Class c2 = User.class;
//3通过Class类的静态方法forName获取
Class c3 = Class.forName(“an.sz.clazz.User”);
2.反射机制动态操作方法_属性_构造器
(1)使用反射机制获取类的名称和属性的方法有哪些?并简述其含义
获取类的名称的方法:
String getName() 获取包名+类名
String getSimpleName 获取类的名字
获取类的属性的方法:
Field getField(String fieldName) 得到公共的属性对象
Field getDeclareField(String fieldName) 得到指定名称的属性对象
Field[] getDeclareFields() 得到所有的属性对象
(2)使用反射机制获取方法及构造方法的方法有哪些?并简述其含义
获取类方法的方法:
getDeclaredMethods() 得到公共的方法对象
getMethods() 得到父类及本类中的公共的方法对象
getDeclaredMethod()得到指定名称的本类中公共的方法对象
getMethod() 得到本类或父类中的公共方法对象
获取构造方法的方法:
getDeclaredConstructors() 得到公共的构造方法的对象
getConstructors() 得到公共的构造方法对象
getDeclaredConstructor(Class …type) 得到指定参数的公共的构造方法对象

3.提高反射效率
(1)简述如何提高反射的效率?
通过 setAccessible 提高性能
a)setAccessible 启用和禁用访问安全检查的开关,值为 true 则指示反射的对象在使用时应该取消 Java 语言访 问检查,值为 false 则指示反射的对象不实施 Java 语 言访问检查,并不是为 true 就能访问为 false 就不能访 问
b) 禁止安全检查,可以提高反射的运行速度
(2)什么是(Reflection)反射?其它语言有这种特点吗?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
只有Java提供反射机制!
4.反射操作泛型
(1)简述什么是泛型?有哪些作用?
Java 中的泛型仅仅是给编译器 javac 使用的,确保数据的安全性和免去强制类型转换的麻烦,但是一旦编译完成,所 有与泛型有关的类型全部擦除。使用泛型直接读取泛型,是读取不到的,因为反射是操作 加载以后的类的
(2)Java新增的数据类型有哪些?
1)ParameterizedType: 表 示 一 种 参 数 化 的 类 型 ,比 如 Collection,可以获取 String 信息
2)GenericArrayType:泛型数组类型
3)TypeVariable:各种类型变量的公共父接口
4)WildcardType:代表一种通配符类型表达式
5.注解
(1)简述注解的作用?
1)不是程序本身,可以对程序作出解释。(这一点跟注释没 什么区别)
2)可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别,如果没有注解信息处理流 程,则注解毫无意义)
(2)常见的内置注解有哪些?
1)@Override :标识方法是重写的方法
2)@Deprecated :标识的方法不建议使用
3)@SuppressWarnings:用来抑制编译时的警告信息
6.自定义注解
(1)自定义注解的注意事项有哪些?
注意事项:注解元素必须要有值。我们定义注解元素时,经 常使用空字符串,0 作为默认值。 也经常使用负数(比如-1)表示不存在的含义
(2)什么叫元注解?
元注解的作用就是负责注解其他注解。在Java中定义了4 个标准的 meta-annotation 类型,它们被用来提供对其它 annotation 类型作说明
7.反射读取注解信息
(1)简述ORM什么含义?
ORM:对象关系映射
(2)举例说明注解的使用?

  1. 编写 Student 类
  2. 编写注解
    3)在类中使用注解
  3. 通过解析程序将注解读取出来 (通过框架解析)
  4. 拼接 SQL 语句,使用 JDBC 到数据库中执行创建表
    分享/讲解/扩展思考
    点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
    第38次(多线程和并发编程)
    学习主题:多线程和并发编程
    学习目标:
    1 掌握实现多线程的第三种方式
    2 掌握线程同步的三种方式
    3 掌握线程池
    4 掌握任务调度
    5 重点掌握线程局部,很多框架都使用到这个技术
    对应视频:
    http://www.itbaizhan.cn/course/id/85.html
    对应文档:

    对应作业
    8.多线程知识回顾
    (1)在Java中创建线程的两种方式是什么?
    1)继承 Thread 2) 实现 Runnable 接口
    (2)简述什么是同步与死锁?及线程间通信的方法有哪些?
    同步与死锁
    1)同步方法 同步监视器为当前对象 this
    2)同步代码块(同步监视器/共享资源的对象){ }
    3)过多的同步就会导致死锁
    线程间的通信
  5. wait()
  6. notify()
  7. notifyAll()
    9.实现多线程的第三种方式
    (1)之前学习实现的多线程的两种方式是什么?有什么缺点?第三种实现多线程的方式是什么?
    (1)编写一个类继承Thread,重写run方法
    (2)编写一个类实现Runable接口
    实现线程前两种方式的缺点
    1)没有返回值
    2)不支持泛型
    3)异常必须处理
    第三种方式:实现 Callable 接口,重写 call 方法
    (2)实现Callable接口来实现多线程的好处是什么?
    第三种方式功能更加强大
    (3)写出实现Callable达到多线程的步骤
    1.自定义线程类 实现Callable接口
    2.重写call方法
    3.在测试类中,创建任务(线程)
    4.交给任务管理器(FutureTask)
    5.创建代理类并启动线程
    10.线程同步Lock锁
    (1)简述线程同步的三种方式?
    1.使用同步代码块
    2.使用同步方法
    3.使用Lock锁
    (2)简述Lock与synchronized的区别?
  8. Lock 是 显 示 锁 (手 动 开 启 和 关 闭 锁 ,别 忘 关 闭 锁),synchronized 是隐式锁
  9. Lock 只有代码块锁,synchronized 有代码块锁和方法锁
  10. 使用 Lock 锁,JVM 将花费较少的时间来调度线程,性能 更好,并且具有更好的扩展性(提供更多的子类)
  11. Lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它 将一直等待(即被阻止),直到该对象被释放。lock()方法会 对 Lock实例对象进行加锁,因此所有对该对象调用 lock() 方法的线程都会被阻塞,直到该 Lock 对象的 unlock()方 法被调用
    11.线程池
    (1)简述什么是线程池?
    线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
    (2)使用线程池有哪些好处?
  12. 提高响应速度(减少了创建新线程的时间)
  13. 降低资源消耗(重复利用线程池中线程,不需要每次都创 建)
  14. 提高线程的可管理性:避免线程无限制创建、从而销毁系 统资源,降低系统稳定性,甚至内存溢出或者 CPU 耗尽
    12.任务调度Task_Timer
    (1)简述什么是任务调度?
    任务:就是事情
    调度:在不同的时间点或者在指定的时间点或者间隔多长时 间我去运行这个任务。
    (2)请你列举出生活中什么的案例是属于任务调度的?
    就是生活中的闹钟
    13.ThreadLocal是什么_JDK底层原理
    (1)简述什么是ThreadLocal?
    ThreadLocal 直译为“本地线程”,其实它就是一容器,用于 存放线程的局部变量 作用:为解决多线程程序的并发问题
    (2)ThreadLocal主要的四个方法是什么?分别表示什么含义?
    1、get() 返回当前线程的此线程局部变量的副本中的值
    2、initialValue()返回此线程局部变量的当前线程的“初始 值”
    3、Remove()删除此线程局部变量的当前线程的值
    4、Set() 将当前线程的线程局部变量的副本设置为指定的值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值