Java注解面试题注解是什么?
- Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法 。Annatation(注解)是一个接口 , 程 序可以通过反射来获取指定程序中元素的 Annotation对象 , 然后通过该 Annotation 对象来获取注解中的元数据信息 。
- @Target , 修饰的对象范围@Target说明了Annotation所修饰的对象范围: Annotation可被用于 packages、types(类、接口、枚举、Annotation 类型)、类型成员 (方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch 参数) 。在 Annotation 类型的声明中使用了 target 可更加明晰其修饰的目标
- @Retention , 定义被保留的时间长短Retention 定义了该 Annotation 被保留的时间长短:表示需要在什么级别保存注解信息 , 用于描述注解的生命周期(即:被描述的注解在 什么范围内有效) , 取值(RetentionPoicy)由:SOURCE:在源文件中有效(即源文件保留)CLASS:在 class 文件中有效(即 class 保留)RUNTIME:在运行时有效(即运行时保留)
- @Inherited 阐述了某个被标注的类型是被继承的@Inherited 元注解是一个标记注解 , @Inherited 阐述了某个被标注的类型是被继承的 。如果一 个使用了@Inherited 修饰的 annotation 类型被用于一个 class , 则这个 annotation 将被用于该class 的子类 。
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口 , 通过FutureTask包装器 , 来创建Thread线程
- 使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService , 管理前面的三种方式)
- 使用退出标志 , 使线程正常退出 , 也就是当run()方法完成后线程终止
- 使用stop方法强行终止 , 但是不推荐这个方法 , 可能会导致线程操作的数据不一致
- 使用interrupt方法中断线程 , 并捕获InterruptedException异常
- 共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后 , 那么就具备了两层语义保证不同线程对这个共享变量进行操作时 , 有可见性 , 就是其中一个线程对该变量值进行修改 , 其他线程是马上可见的 , volatile关键字会强制将修改的值同步到主内存 。禁止指令重排 , 禁止编译器优化代码顺序 , 避免在单例Double Check中导致多次初始化 , 保证有有序性 。
- 注意 , volatile不能保证原子性 。
- start()方法被用来启动新创建的线程 , 而且start()内部调用了run()方法 , 这和直接调用run()方法的效果不一样 。当你调用run()方法的时候 , 只会是在原来的线程中调用 , 没有新的线程启动 , start()方法才会启动新线程 。
- 相似点这两种同步方式有很多相似之处 , 它们都是加锁方式同步 , 而且都是阻塞式的同步 , 也就是说当如果一个线程获得了对象锁 , 进入了同步块 , 其他访问该同步块的线程都必须阻塞在同步块外面等待 , 而进行线程阻塞和唤醒的代价是比较高的 。
- 区别对于Synchronized来说 , 它是java语言的关键字 , 是原生语法层面的互斥 , 需要jvm实现 。而ReentrantLock它是JDK 1.5之后提供的API层面的互斥锁 , 需要lock()和unlock()方法配 合try/?nally语句块来完成 。Synchronized进过编译 , 会在同步块的前后分别形成monitorenter和monitorexit这个两个字节码指令 。在执行monitorenter指令时 , 首先要尝试获取对象锁 。如果这个对象没被锁定 , 或者当前线程已经拥有了那个对象锁 , 把锁的计数器加1 , 相应的 , 在执行monitorexit指令时会将锁计数器就减1 , 当计数器为0时 , 锁就被释放了 。如果获取对象锁失败 , 那当前线程就要阻塞 , 直到对象锁被另一个线程释放为止。
- ReentrantLock特性等待可中断 , 持有锁的线程长期不释放的时候 , 正在等待的线程可以选择放弃等待 , 这相当于Synchronized来说可以避免出现死锁的情况 。公平锁 , 多个线程等待同一个锁时 , 必须按照申请锁的时间顺序获得锁 , Synchronized锁非公平锁 , ReentrantLock默认的构造函数是创建的非公平锁 , 可以通过参数true设为公平锁 , 但公平锁表现的性 能不是很好 。锁绑定多个条件 , 一个ReentrantLock对象可以同时绑定对个对象。
推荐阅读
- 袁天罡的后人是谁 历史上有袁天罡这个人吗
- Mysql数据库实现主从同步,看这一篇就够了
- 10分钟自建企业级Docker镜像仓库!这个开源项目太顶了
- 电视机顶盒和网络机顶盒哪个好?
- Python自带爬虫库urllib使用大全
- 癫痫的前兆有哪些症状
- 如何治疗痔疮的小窍门
- 皮肤受损后该如何修复
- 西装|辣目洋子教你玩转西装穿搭,微胖女生这样穿也能在职场脱颖而出
- 老年人脚麻木吃什么药