目录
一、背景
这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题。这个问题非常关键,也就是说,你在学习一个技术的时候,需要知道这个技术的成因和目标,也就是这个技术的灵魂。如果不知道这些的话,那么你会看不懂这个技术的一些设计理念。
二、优缺点
这个技术的优势和劣势分别是什么,或者说,这个技术的 trade-off 是什么。任何技术都有其好坏,在解决一个问题的时候,也会带来新的问题。另外,一般来说,任何设计都有 trade-off(要什么和不要什么),所以,你要清楚这个技术的优势和劣势,以及带来的挑战。
三、适用场景
这个技术适用的场景。任何技术都有其适用的场景,离开了这个场景,这个技术可能会有很多槽点,所以学习技术不但要知道这个技术是什么,还要知道其适用的场景。没有任何一个技术是普适的。注意,所谓场景一般分别两个,一个是业务场景,一个是技术场景。
四、核心组成
技术的组成部分和关键点。这是技术的核心思想和核心组件了,也是这个技术的灵魂所在了。学习技术的核心部分是快速掌握的关键。
基本语法
JDK、JRE、JVM
权限修饰符
- | 类内部 | 包内部 | 子类 | 外部包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
常量
数据类型
- 基本数据类型
类型 | 名称 | 含义 | bit |
---|---|---|---|
整型 | byte | 字节 | 8 |
整型 | short | 短整型 | 16 |
整型 | int | 整型 | 32 |
整型 | long | 长整型 | 64 |
浮点型 | float | 浮点数 | 32 |
浮点型 | double | 双精度浮点数 | 64 |
字符 | char | 字符 | 16 |
布尔型 | boolean | 布尔型 | 1 |
- 引用数据类型
String
数组
接口
类
面向对象
抽象
封装
继承
多态
高级应用
异常处理
多线程
-
概念
程序:指令+数据(静态)
进程:执行程序的过程
线程:操作系统能够进行运算调度的最小单位。在Java中,线程是程序执行流的最小单元。 -
线程创建
1、Thread Class(继承),重写run()方法,调用start()方法
底层:实现 Runnable 接口
缺点:OOP单继承
2、【推荐】Runnable 接口(实现),实现run()方法,传入对象(静态代理),调用start()方法
3、Callable 接口(实现) -
线程状态
1、new
2、runnable
3、running
4、blocked
5、dead -
线程停止
1、线程正常停止
2、使用标志符
3、不使用stop或destroy等过时方法 -
线程休眠 sleep
模拟网络延时,倒计时等;不会释放锁 -
线程礼让 yield
让当前线程暂停,但不阻塞;礼让不一定成功 -
“插队” join
当一个线程调用另一个线程的join()方法时,调用线程会被阻塞,直到被加入的线程完成其任务。 -
优先级 priority 1~10
先设置优先级,再启动 -
守护线程 daemon
为了服务其他线程而存在的;
记录日志、监控内存、垃圾回收;
当所有的非守护线程都终止时,守护线程也将自动终止 -
线程同步 synchronized
队列+锁(变化的对象,增删改)
缺点:性能问题
同步方法:确保同一时刻只有一个线程可以执行该方法
同步块:允许你在一段代码块内执行同步操作,而不是整个方法
死锁:指两个或多个线程陷入了永久等待的状态,每个线程都在等待另一个线程释放资源
锁:lock 显式锁(手动开关) -
线程协作
生产者消费者问题(管程法、信号灯法)
wait():等待,释放锁
notify():唤醒等待的线程 -
线程池 ExecutorService
提升速度、减少资源消耗、便于管理
execute()/shutdown()
集合
List
- ArrayList
Set
- HashSet
Map
-HashMap
概要
变量
流程控制
数组
面向对象
异常
多线程
常用类
枚举
集合
泛型
I/O流
网络编程
反射 Reflection
Class 类
Java8新特性
注解
五、底层原理
技术的底层原理和关键实现。任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其它技术的关键基础技术。所以,学习这些关键的基础底层技术,可以让你未来很快地掌握其它技术。
六、对比
已有的实现和它之间的对比。一般来说,任何一个技术都会有不同的实现,不同的实现都会有不同的侧重。学习不同的实现,可以让你得到不同的想法和思路,对于开阔思维,深入细节是非常重要的。
参考
集合:https://www.bilibili.com/video/BV1YA411T76k/?spm_id_from=333.337.search-card.all.click&vd_source=2657cb270ac61e9520442429c5dacab7
Java 并发编程核心 78 讲