文章目录
简介
- 本文是2021/04/16整理的笔记
- 赘述可能有点多,还请各位朋友耐心阅读
- 本人的内容和答案不一定是最好最正确的,欢迎各位朋友评论区指正改进
Lock锁
ReentrantLock锁
构造方法
- 无参构造方法 public ReentrantLock()
默认是非公平锁,等同于public ReentrantLock(false)。 - 有参构造方法
public ReentrantLock(boolean fair)
有参构造如果参数是true,就是公平锁,要排队
volatile关键字
volatile关键字的作用是什么
- 多线程使用volatile关键字修饰的变量,保证变量在多线程间的可见性。即每次读取volatile变量,一定是最新的数据
- Java代码执行时,JVM为了执行效率,可能会对指令进行重排序,多线程时可能会出现问题。使用volatile关键字会禁止语义重排序,当然这也一定程度上降低了代码执行效率。
语义重排序
JVM执行value++;
value++ 事实上分为3个独立的操作
- 读取这个值
- 使之加一
- 再写入新值
如果是多线程共享value变量,JVM打乱排序,就可能导致问题。
注意事项
- volatile关键字不要轻易使用
Timer
Timer是Java最早提供的一个任务调度器,它可以支持定时任务和重复任务的调度。
Timer和ScheduledThreadPoolExecutor有什么区别?
一个Timer调度器的所有任务都运行在一个线程中,存在单个任务出现异常导致所有任务不能执行的隐患,而JDK5之后的ScheduledThreadPoolExecutor提供了并发任务调用,没有这个隐患。
TimerTask
- TimerTask是一个抽象类,和Runnable接口一样,通过一个run()抽象方法来定义任务执行的内容
- TimerTask是Runnable接口的子接口。
- TimerTask拓展:
cancel() 取消此计时器任务
shceduledExecutionTime() 返回此任务最近实际执行的已安排执行时间
SimpleDateFormat
- 构造方法
SimpleDateFormat(String pattern)
pattern: “yyyy-MM-dd HH:mm:ss SSS”
yyyy:年
MM:月
dd:日
HH:时(24进制) hh:时(12进制)
mm:分
ss:秒
SSS:毫秒
Quartz调度器(框架)
- Quartz是OpenSymphony开源组织在Job schedulign领域又一个开源项目,完全由Java开发,可以执行定时任务,类似于java.util.Timer。
- Quartz的基本组成部分:
调度器: Scheduler
任务:JobDetail
触发器:Trigger,包括SimpleTrigger和CronTrigger
Cron表达式
Spring Task的实现需要使用cron表达式来声明执行的频率和规则,cron表达式是由6位或者7位组成的。
第06章 核心机制
泛型
泛型的本质
泛型的本质是参数化烈性,也就是说所操作的数据类型被指定为一个参数。
参数化类型
泛型类型的“类型参数”,它们可以被称为参数化类型
泛型的好处
安全简单,让运行期异常在编译期就显示
泛型使用对比
没有泛型之前,保存“通用数据”的方法
有了泛型之后
Java中类型擦除的特征与限制
编译器处理泛型有两种方式
Codespecialization
Codesharing
类型擦除
类型擦除后保留的原始类型
Java中类型擦除的限制
无法利用同一泛型类的示例来区分方法签名
泛型类的静态变量是共享的
Java中类型擦除的特征
泛型类
使用泛型
泛型方法
泛型接口
两种方式
1.
2.