线程5种实现方式
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口,创建FutureTask
- 基于线程池方式
- 基于定时器,实现TimeTask接口
volatile的适用场景
- 状态标志
- 一次性安全发布(单例)
- 开销较低的“读-写锁”策略
线程5种状态
- 新建状态
- 就绪状态
- 运行状态
- 阻塞状态(等待阻塞wait、同步阻塞synchronized、其他阻塞sleep join)
- 死亡状态
Synchronized与Lock的区别
一个关键字一个接口
等待获取,lock也可以不用一直等待获取(tryLock)
一个自动释放一个手动释放
synchronized可重入不可中断非公平、lock可重入可判断可公平
一个适合少量同步、一个适合大量同步
JAVA内存模型
Java内存模型,其实是保证了Java程序在各种平台下对内存的访问都能够得到一致效果的机制及规范。目的是解决由于多线程通过共享内存进行通信时,存在的原子性、可见性(缓存一致性)以及有序性问题。
除此之外,Java内存模型还提供了一系列原语,封装了底层实现后,供开发者直接使用。如我们常用的一些关键字:synchronized、volatile以及并发包等。