1. 线程创建的几种方式
2. 锁的类型
- 在学习JUC之前,加锁、等待、唤醒 分别使用的是 (synchronized、lock)、wait、notify
- 在学习JUC开始,学会使用lock接口的其他实现类来进行上述操作,比如 ReentrantLock
3. 线程池
- ExecutorService 的 submit 和 execute都可以执行 实现了 Runnable 接口的 任务,但是submit 执行的 任务 是可以拿到返回值的,execute则没有
- 如果 执行 的多个任务中有一个发生了异常,execute 抛出异常,其他线程继续执行新任务,submit 则没有提示(只有主动 Future.get 才能拿到异常信息),其他线程继续执行
- 如果需要 捕获 线程执行任务时的异常信息,可以在任务代码中加上try catch,但是比较麻烦,推荐重写 afterExecute 方法,参数为 Runnable 和 Throwable,可以通过判断 Throwable 是否有值来 捕获打印异常信息(抖音上刷到的)