# 八股-Java并发 ## 面试题 - AQS为什么采用双向链表? - AQS是如何实现线程的等待和唤醒的? - AQS的同步队列和条件队列原理? - CAS一定有自旋吗? - CAS在操作系统层面是如何保证原子性的? - CompletableFuture的底层是如何实现的? - CountDownLatch、CyclicBarrier、Semaphore区别? - ForkJoinPool和ThreadPoolExecutor区别是什么? - JDK21 中的虚拟线程是怎么回事? - Java是如何判断一个线程是否存活的? - Java线程出现异常,进程为啥不会退出? - LongAdder和AtomicLong的区别? - Thread.sleep(0)的作用是什么? - ThreadLocal为什么会导致内存泄漏?如何解决的? - ThreadLocal的应用场景有哪些? - happens-before和as-if-serial有啥区别和联系? - int a = 1 是原子性操作吗 - run_start、wait_sleep、notify_notifyAll区别_ - sychronized是非公平锁吗,那么是如何体现的? - synchronized 的锁能降级吗? - synchronized和reentrantLock区别? - synchronized是如何保证原子性、可见性、有序性的? - synchronized是怎么实现的? - synchronized的重量级锁很慢,为什么还需要重量级锁? - synchronized的锁优化是怎样的? - synchronized的锁升级过程是怎样的? - synchronized锁的是什么? - volatile是如何保证可见性和有序性的? - volatile能保证原子性吗?为什么? - 三个线程分别顺序打印0-100 - 为什么JDK 15要废弃偏向锁? - 为什么不建议通过Executors构建线程池 - 为什么不能在try-catch中捕获子线程的异常_ - 为什么虚拟线程不能用synchronized? - 为什么虚拟线程不要和线程池一起用? - 为什么虚拟线程尽量避免使用ThreadLocal - 什么是AQS的独占模式和共享模式? - 什么是CAS?存在什么问题? - 什么是Java内存模型(JMM)? - 什么是ThreadLocal,如何实现的? - 什么是Unsafe? - 什么是happens-before原则? - 什么是可重入锁,怎么实现可重入锁? - 什么是多线程中的上下文切换? - 什么是守护线程,和普通线程有什么区别? - 什么是并发,什么是并行? - 什么是总线嗅探和总线风暴,和JMM有什么关系? - 什么是死锁,如何解决? - 什么是线程池,如何实现的? - 公平锁和非公平锁的区别? - 创建线程有几种方式? - 到底啥是内存屏障?到底怎么加的? - 如何保证多线程下 i++ 结果正确? - 如何实现主线程捕获子线程异常 - 如何对多线程进行编排 - 如何理解AQS? - 如何让Java的线程池顺序执行任务? - 并发编程中的原子性和数据库ACID的原子性一样吗? - 有三个线程T1,T2,T3如何保证顺序执行? - 有了CAS为啥还需要volatile? - 有了InheritableThreadLocal为啥还需要TransmittableThreadLocal? - 有了MESI为啥还需要JMM? - 有了synchronized为什么还需要volatile_ - 有哪些实现线程安全的方案_ - 父子线程之间怎么共享_传递数据? - 线程同步的方式有哪些? - 线程数设定成多少更合适? - 线程是如何被调度的? - 线程有几种状态,状态之间的流转是怎样的? - 线程池的拒绝策略有哪些? - 能不能谈谈你对线程安全的理解?