基本概念

什么是并发编程?

为什么要用并发编程?

并发编程的缺点?

并行是什么意思?与并发的区别是什么?

什么是线程?什么是进程?为什么要有线程?有什么关系与区别?

如何创建、启动 Java 线程?

如何优雅地停止一个线程?

什么是守护线程?

线程包括哪些状态?状态之间是如何变化的?

什么是线程池?

Executors如何创建线程池?

线程池包含哪些状态?

如何停止一个线程池?

导致并发程序出问题的根本原因是什么?

Java 隐式锁 - synchronized 关键字

Java 中的 volatile 关键字

Java 中的锁

Java 中的锁如何使用?有什么注意事项?

Java 中可重入锁、不可重入锁的测试

Java 中锁之间的对比

synchronized 锁的升级原理是什么?

如何避免死锁?

什么是活锁和饥饿?及示例

Java中的线程等待和唤醒

Java 中有哪些无锁技术来解决并发问题?如何使用?

什么是 Java 内存模型?

什么是 happens before 原则?

什么是协程?Java 中如何支持?

 

JDK 1.8中的并发工具类

Lock、Condition 如何使用?

Semaphore 如何使用?

ReadWriteLock 如何使用?

StampedLock 如何使用?

CountDownLatch 如何使用?

CyclicBarrier 如何使用?

JDK 中的并发容器包括哪些?如何使用?

原子类包括哪些?如何使用?

Executor 如何使用?

Future 如何使用?

CompletableFuture 如何使用?

CompletionService 如何使用?

ForkJoinPool 如何使用?

 

扩展

并发编程的常见模式

Java 并发编程的学习资源推荐

Java 并发编程的总结图

 


【Java面试题与答案】整理推荐

  • 基础与语法
  • 集合
  • 网络编程
  • 并发编程
  • Web
  • 安全
  • 设计模式
  • 框架
  • 算法与数据结构
  • 异常
  • 文件解析与生成
  • Linux
  • MySQL
  • Oracle
  • Redis
  • Dubbo

 

更多推荐

带着问题重学 Java 并发编程