Java编程学习必备:最强并发编程学习大纲,简洁,但不失重点!

2020-02-12  本文已影响0人  Java_苏先生

一、多线程

1. 无返回值

①. 实现runnable接口

②. 继承Thread类

2. 有返回值(实现Callable接口)

①. future拿 到返回值

②. call方法会抛异常

③. 需要Thread的start方法启动多线程

3. 解决future的get方法阻塞问题completionService

①. take方法也是阻塞方法,只是会拿其中一个完成的future

②. poll方法和take类似,只是poll方法不会阻塞,没有完成的任务直接返回null,可以加等待的时间

4. ThreadLocal

①. 线程间的数据隔离

②. 解决多线程安全问题

③. 优雅做法:帮ThreadLocal包装到单例中

二、并发包

三、相关问题理解

1. 对volatile的理解

①. 虚拟机提供的轻量的同步机制

②. 在JMM的理解

③. 哪些地方用过volatile

2. CAS的理解(比较交换)

①. 工作内存与主存数据比较一样的时候修改,不一样的时候重复读取主存,跟新工作内存数据

②. CAS底层,unsafe的理解:native方法,unsafe类

③. CAS缺点:

A. 循环时间长,CPU开销大

B.只能保证一个共享变量的原子性:不能保证代码块的原子性

C. 有ABA问题:

3. Arayit是线程不安全的,解决线程不安全的方言

4. 各种锁的理解

①. 公平锁/非公平锁

②. 对象锁

③. 偏向锁

④. 可重入锁

⑤. 自旋锁

⑥. 独占锁(写)/共享锁(读)

⑦. 读写锁

⑧. 锁优化

5. CountDownLatch/CyclicBarrier/Semaphore

①. CountDownLatch

②. CyclicBarrier

③. Semaphore

6. 阻塞队列

①. 是什么

②. 好处

③. Blockqueue核心方法处理出错

④. 架构种类

⑤. 用在哪里

7. Java线程池,ThreadPoolExecutor的理解 田

①. 线程池优势

②. 线程池的使用

③. 线程池的重要参数

④. 线程池的工作原理

a. 创建线程池后等待提交任务

b. 调用execute添加任务,线程池做的判断:

c. 当一个线程任务处理完,会从任务队列中取下一个任务执行

d. 当一个线程空闲时间超过keepAliveTime时候,线程池处理(如果当前线程数量大于核心线程数,那么这个线程就会被销毁)

8. 线程池参数的合理配置

①. 线程池拒绝策略

②. 创建线程池的方法

a. 使用自定义线程池

b. executors线程池问题:

③. 如何合理配置线程池数量

9. 死锁定位分析

①. 产生原因:

②. 解决:jps定位到进程id, jstack定位到栈代码

# 链接 Java程序员福利"常用资料分享"

上一篇 下一篇

猜你喜欢

热点阅读