|
2 | 2 |
|
3 | 3 | <!-- TOC --> |
4 | 4 |
|
5 | | -* [并发简介](#并发简介) |
6 | | - * [什么是进程?什么是线程?进程和线程的区别?](#什么是进程什么是线程进程和线程的区别) |
7 | | - * [多线程编程的好处是什么?](#多线程编程的好处是什么) |
8 | | - * [如何让正在运行的线程暂停一段时间?](#如何让正在运行的线程暂停一段时间) |
9 | | - * [什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?](#什么是线程调度器thread-scheduler和时间分片time-slicing) |
10 | | - * [在多线程中,什么是上下文切换(context-switching)?](#在多线程中什么是上下文切换context-switching) |
11 | | - * [如何确保线程安全?](#如何确保线程安全) |
12 | | - * [什么是死锁(Deadlock)?如何分析和避免死锁?](#什么是死锁deadlock如何分析和避免死锁) |
13 | | -* [线程基础](#线程基础) |
14 | | - * [Java 线程生命周期中有哪些状态?各状态之间如何切换?](#java-线程生命周期中有哪些状态各状态之间如何切换) |
15 | | - * [创建线程有哪些方式?这些方法各自利弊是什么?](#创建线程有哪些方式这些方法各自利弊是什么) |
16 | | - * [start() 和 run() 有什么区别?可以直接调用 Thread 类的 run() 方法么?](#start-和-run-有什么区别可以直接调用-thread-类的-run-方法么) |
17 | | - * [sleep()、yield()、join() 方法有什么区别?为什么 sleep()和 yield()方法是静态的?](#sleepyieldjoin-方法有什么区别为什么-sleep和-yield方法是静态的) |
18 | | - * [Java 的线程优先级如何控制?高优先级的 Java 线程一定先执行吗?](#java-的线程优先级如何控制高优先级的-java-线程一定先执行吗) |
19 | | - * [什么是守护线程?为什么要用守护线程?如何创建守护线程?](#什么是守护线程为什么要用守护线程如何创建守护线程) |
20 | | - * [线程之间是如何通信的?](#线程之间是如何通信的) |
21 | | - * [为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?](#为什么线程通信的方法-wait-notify和-notifyall被定义在-object-类里) |
22 | | - * [为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?](#为什么-wait-notify和-notifyall必须在同步方法或者同步块中被调用) |
23 | | - * [什么是 Callable 和 Future?](#什么是-callable-和-future) |
24 | | - * [什么是 FutureTask?](#什么是-futuretask) |
25 | | -* [并发机制的底层实现](#并发机制的底层实现) |
26 | | - * [volatile 关键字在 Java 中有什么作用?](#volatile-关键字在-java-中有什么作用) |
27 | | - * [什么是 ThreadLocal?](#什么是-threadlocal) |
28 | | - * [synchronized 有什么作用?它的实现原理是什么?](#synchronized-有什么作用它的实现原理是什么) |
29 | | - * [同步方法和同步块,哪个是更好的选择?](#同步方法和同步块哪个是更好的选择) |
30 | | - * [volatile 有什么作用?它的实现原理是什么?](#volatile-有什么作用它的实现原理是什么) |
31 | | - * [volatile 和 synchronized 的区别](#volatile-和-synchronized-的区别) |
32 | | -* [内存模型](#内存模型) |
33 | | - * [什么是 Java 内存模型](#什么是-java-内存模型) |
34 | | -* [同步容器和并发容器](#同步容器和并发容器) |
35 | | - * [什么是同步容器?有哪些常见同步容器?它们是如何实现线程安全的?同步容器真的线程安全吗?](#什么是同步容器有哪些常见同步容器它们是如何实现线程安全的同步容器真的线程安全吗) |
36 | | - * [什么是并发容器的实现?](#什么是并发容器的实现) |
37 | | -* [锁](#锁) |
38 | | - * [Lock 接口(Lock interface)是什么?对比同步它有什么优势?](#lock-接口lock-interface是什么对比同步它有什么优势) |
39 | | - * [什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?](#什么是阻塞队列如何使用阻塞队列来实现生产者-消费者模型) |
40 | | -* [原子变量类](#原子变量类) |
41 | | - * [什么是原子操作?有哪些原子类?原子类的实现原理是什么?](#什么是原子操作有哪些原子类原子类的实现原理是什么) |
42 | | -* [并发工具类](#并发工具类) |
43 | | - * [CyclicBarrier 和 CountDownLatch 有什么不同?](#cyclicbarrier-和-countdownlatch-有什么不同) |
44 | | -* [线程池](#线程池) |
45 | | - * [什么是线程池?如何创建一个 Java 线程池?](#什么是线程池如何创建一个-java-线程池) |
46 | | - * [什么是 Executors 框架?](#什么是-executors-框架) |
47 | | - * [Executors 类是什么?](#executors-类是什么) |
48 | | -* [资料](#资料) |
| 5 | +- [Java 并发面试题总结](#java-并发面试题总结) |
| 6 | + - [并发简介](#并发简介) |
| 7 | + - [什么是进程?什么是线程?进程和线程的区别?](#什么是进程什么是线程进程和线程的区别) |
| 8 | + - [多线程编程的好处是什么?](#多线程编程的好处是什么) |
| 9 | + - [如何让正在运行的线程暂停一段时间?](#如何让正在运行的线程暂停一段时间) |
| 10 | + - [什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?](#什么是线程调度器thread-scheduler和时间分片time-slicing) |
| 11 | + - [在多线程中,什么是上下文切换(context-switching)?](#在多线程中什么是上下文切换context-switching) |
| 12 | + - [如何确保线程安全?](#如何确保线程安全) |
| 13 | + - [什么是死锁(Deadlock)?如何分析和避免死锁?](#什么是死锁deadlock如何分析和避免死锁) |
| 14 | + - [线程基础](#线程基础) |
| 15 | + - [Java 线程生命周期中有哪些状态?各状态之间如何切换?](#java-线程生命周期中有哪些状态各状态之间如何切换) |
| 16 | + - [创建线程有哪些方式?这些方法各自利弊是什么?](#创建线程有哪些方式这些方法各自利弊是什么) |
| 17 | + - [start() 和 run() 有什么区别?可以直接调用 Thread 类的 run() 方法么?](#start-和-run-有什么区别可以直接调用-thread-类的-run-方法么) |
| 18 | + - [sleep()、yield()、join() 方法有什么区别?为什么 sleep()和 yield()方法是静态的?](#sleepyieldjoin-方法有什么区别为什么-sleep和-yield方法是静态的) |
| 19 | + - [Java 的线程优先级如何控制?高优先级的 Java 线程一定先执行吗?](#java-的线程优先级如何控制高优先级的-java-线程一定先执行吗) |
| 20 | + - [什么是守护线程?为什么要用守护线程?如何创建守护线程?](#什么是守护线程为什么要用守护线程如何创建守护线程) |
| 21 | + - [线程之间是如何通信的?](#线程之间是如何通信的) |
| 22 | + - [为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?](#为什么线程通信的方法-wait-notify和-notifyall被定义在-object-类里) |
| 23 | + - [为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?](#为什么-wait-notify和-notifyall必须在同步方法或者同步块中被调用) |
| 24 | + - [什么是 Callable 和 Future?](#什么是-callable-和-future) |
| 25 | + - [什么是 FutureTask?](#什么是-futuretask) |
| 26 | + - [并发机制的底层实现](#并发机制的底层实现) |
| 27 | + - [volatile 关键字在 Java 中有什么作用?](#volatile-关键字在-java-中有什么作用) |
| 28 | + - [什么是 ThreadLocal?](#什么是-threadlocal) |
| 29 | + - [synchronized 有什么作用?它的实现原理是什么?](#synchronized-有什么作用它的实现原理是什么) |
| 30 | + - [同步方法和同步块,哪个是更好的选择?](#同步方法和同步块哪个是更好的选择) |
| 31 | + - [volatile 有什么作用?它的实现原理是什么?](#volatile-有什么作用它的实现原理是什么) |
| 32 | + - [volatile 和 synchronized 的区别](#volatile-和-synchronized-的区别) |
| 33 | + - [内存模型](#内存模型) |
| 34 | + - [什么是 Java 内存模型](#什么是-java-内存模型) |
| 35 | + - [同步容器和并发容器](#同步容器和并发容器) |
| 36 | + - [什么是同步容器?有哪些常见同步容器?它们是如何实现线程安全的?同步容器真的线程安全吗?](#什么是同步容器有哪些常见同步容器它们是如何实现线程安全的同步容器真的线程安全吗) |
| 37 | + - [什么是并发容器的实现?](#什么是并发容器的实现) |
| 38 | + - [锁](#锁) |
| 39 | + - [Lock 接口(Lock interface)是什么?对比同步它有什么优势?](#lock-接口lock-interface是什么对比同步它有什么优势) |
| 40 | + - [什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?](#什么是阻塞队列如何使用阻塞队列来实现生产者-消费者模型) |
| 41 | + - [原子变量类](#原子变量类) |
| 42 | + - [什么是原子操作?有哪些原子类?原子类的实现原理是什么?](#什么是原子操作有哪些原子类原子类的实现原理是什么) |
| 43 | + - [并发工具类](#并发工具类) |
| 44 | + - [CyclicBarrier 和 CountDownLatch 有什么不同?](#cyclicbarrier-和-countdownlatch-有什么不同) |
| 45 | + - [线程池](#线程池) |
| 46 | + - [什么是线程池?如何创建一个 Java 线程池?](#什么是线程池如何创建一个-java-线程池) |
| 47 | + - [什么是 Executors 框架?](#什么是-executors-框架) |
| 48 | + - [Executors 类是什么?](#executors-类是什么) |
| 49 | + - [资料](#资料) |
49 | 50 |
|
50 | 51 | <!-- /TOC --> |
51 | 52 |
|
|
120 | 121 | 线程状态切换如下图所示: |
121 | 122 |
|
122 | 123 | <p align="center"> |
123 | | - <img src="https://raw.githubusercontent.com/dunwu/javase-notes/master/images/concurrent/thread-states.png" alt="thread-states"> |
| 124 | + <img src="https://raw.githubusercontent.com/dunwu/javase-notes/master/images/concurrent/thread-state.png" alt="thread-states"> |
124 | 125 | </p> |
125 | 126 |
|
126 | 127 | > 参考阅读:[Java Thread Methods and Thread States](https://www.w3resource.com/java-tutorial/java-threadclass-methods-and-threadstates.php) |
|
0 commit comments