|
1 | | -## Java多线程 |
| 1 | +## 多线程 |
| 2 | + |
| 3 | + |
| 4 | +* [1.说说synchronized的实现原理](#1说说synchronized的实现原理) |
| 5 | +* [2.ReentrantLock与synchronized的区别](#2reentrantlock与synchronized的区别) |
| 6 | +* [3.ReentrantLock实现原理](#3reentrantlock实现原理) |
| 7 | +* [4.Java原子类AtomicInteger实现原理](#4java原子类atomicinteger实现原理) |
| 8 | +* [5.Java线程池实现原理](#5java线程池实现原理) |
| 9 | +* [6.ThreadLocal实现原理](#6threadlocal实现原理) |
| 10 | +* [7.InheritableThreadLocal原理知道吗?](#7inheritablethreadlocal原理知道吗) |
| 11 | +* [8.说一下synchronized锁升级过程](#8说一下synchronized锁升级过程) |
| 12 | +* [9.了解过什么是“伪共享”吗?](#9了解过什么是伪共享吗) |
| 13 | +* [10.“伪共享”出现的原因是什么?](#10伪共享出现的原因是什么) |
| 14 | +* [11.如何避免“伪共享”?](#11如何避免伪共享) |
| 15 | +* [12.Java里的线程有哪些状态?](#12java里的线程有哪些状态) |
| 16 | +* [13.什么是悲观锁?什么是乐观锁?](#13什么是悲观锁什么是乐观锁) |
| 17 | +* [14.怎么停止一个运行中的线程?](#14怎么停止一个运行中的线程) |
| 18 | +* [15.说一下你对volatile的理解?](#15说一下你对volatile的理解) |
| 19 | +* [16.并发编程三要素?](#16并发编程三要素) |
| 20 | +* [17.创建线程有哪些方式?](#17创建线程有哪些方式) |
| 21 | +* [18.线程池的优点?](#18线程池的优点) |
| 22 | +* [19.CyclicBarrier和CountDownLatch的区别](#19cyclicbarrier和countdownlatch的区别) |
| 23 | +* [20.什么是CAS?](#20什么是cas) |
| 24 | +* [21.CAS的问题](#21cas的问题) |
| 25 | +* [22.什么是AQS?](#22什么是aqs) |
| 26 | +* [23.AQS支持几种同步方式?](#23aqs支持几种同步方式) |
| 27 | +* [24.什么是自旋锁?](#24什么是自旋锁) |
| 28 | +* [25.什么是多线程的上下文切换?](#25什么是多线程的上下文切换) |
| 29 | +* [26.什么是线程和进程?](#26什么是线程和进程) |
| 30 | +* [27.程序计数器为什么是私有的?](#27程序计数器为什么是私有的) |
| 31 | +* [28.虚拟机栈和本地方法栈为什么是私有的?](#28虚拟机栈和本地方法栈为什么是私有的) |
| 32 | +* [29.并发与并行的区别?](#29并发与并行的区别) |
| 33 | +* [30.什么是线程死锁?如何避免死锁?](#30什么是线程死锁如何避免死锁) |
| 34 | +* [31.sleep() 方法和 wait() 方法的区别和共同点?](#31sleep-方法和-wait-方法的区别和共同点) |
| 35 | +* [32.为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?](#32为什么我们调用-start-方法时会执行-run-方法为什么我们不能直接调用-run-方法) |
| 36 | +* [33.什么是线程安全问题?如何解决?](#33什么是线程安全问题如何解决) |
| 37 | +* [34.什么是活锁?](#34什么是活锁) |
| 38 | +* [35.什么是线程的饥饿问题?如何解决?](#35什么是线程的饥饿问题如何解决) |
| 39 | +* [36.什么是线程的阻塞问题?如何解决?](#36什么是线程的阻塞问题如何解决) |
| 40 | +* [37.synchronized 关键字和 volatile 关键字的区别](#37synchronized-关键字和-volatile-关键字的区别) |
| 41 | +* [38.说一说几种常见的线程池及适用场景?](#38说一说几种常见的线程池及适用场景) |
| 42 | +* [39.线程池都有哪几种工作队列?](#39线程池都有哪几种工作队列) |
| 43 | +* [40.什么是线程安全?](#40什么是线程安全) |
| 44 | +* [41.Java中如何获取到线程dump文件](#41java中如何获取到线程dump文件) |
| 45 | +* [42.Java中用到的线程调度算法是什么?](#42java中用到的线程调度算法是什么) |
| 46 | +* [43.Thread.sleep(0)的作用是什么?](#43threadsleep0的作用是什么) |
| 47 | +* [44.单例模式的线程安全性](#44单例模式的线程安全性) |
| 48 | +* [45.Semaphore有什么作用?](#45semaphore有什么作用) |
| 49 | +* [46.Hashtable的size()方法中明明只有一条语句"return count",为什么还要做同步?](#46hashtable的size方法中明明只有一条语句return-count为什么还要做同步) |
| 50 | +* [47.同步方法和同步块,哪个是更好的选择?](#47同步方法和同步块哪个是更好的选择) |
| 51 | +* [48.高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?](#48高并发任务执行时间短的业务怎样使用线程池并发不高任务执行时间长的业务怎样使用线程池并发高业务执行时间长的业务怎样使用线程池) |
| 52 | +* [49.在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?](#49在java中lock接口比synchronized块的优势是什么你需要实现一个高效的缓存它允许多个用户读但只允许一个用户写以此来保持它的完整性你会怎样去实现它) |
| 53 | +* [50.你将如何使用thread dump?你将如何分析Thread dump?](#50你将如何使用thread-dump你将如何分析thread-dump) |
| 54 | +* [参考资料](#参考资料) |
| 55 | + |
2 | 56 |
|
3 | 57 | #### 1.说说synchronized的实现原理 |
4 | 58 |
|
@@ -375,9 +429,9 @@ lock接口在多线程和并发编程中最大的优势是它们为读和写分 |
375 | 429 | 在UNIX中你可以使用kill -3,然后thread dump将会打印日志,在windows中你可以使用”CTRL+Break”。非常简单和专业的线程面试问题,但是如果他问你怎样分析它,就会很棘手。 |
376 | 430 |
|
377 | 431 | ### 参考资料 |
| 432 | + |
378 | 433 | https://blog.csdn.net/tanmomo/article/details/99671622 |
379 | 434 | https://blog.csdn.net/cmyperson/article/details/79610870 |
380 | 435 | https://www.cnblogs.com/toria/p/11234323.html |
381 | 436 | https://www.cnblogs.com/bors/p/dxc.html |
382 | | - |
383 | | -http://ifeve.com/15-java-faq/ |
| 437 | +http://ifeve.com/15-java-faq/ |
0 commit comments