1. Java并发学习笔记


1.1. 简介

该学习笔记包含 Java 并发相关的知识。


1.2. 常见面试题目

什么是多线程中的上下文切换

谈谈对线程安全的理解

什么是并发,什么是并行

线程有几种状态,状态之间是怎么流转的

什么是守护线程,和普通线程有什么区别

JDK21 中的虚拟线程是怎么回事

创建线程有几种方式

run/start、wait/sleep、notify/notifyAll 区别

什么是线程池,如何实现的

线程数设置成多少更合适

什么是 ThreadLocal,如何实现的

线程同步的方式有哪些

什么是死锁如何解决

什么是 Java 内存模型(JMM)

synchronized 是怎么实现的

synchronized 锁的是什么

synchronized 是如何保证原子性、可见性、有序性的

synchronized 的锁升级过程是怎么样的

synchronized 的重量级锁很慢,为什么还需要重量级锁

synchronized 的锁优化是怎样的

volatile 能保证原子性吗?为什么?

int a=1 是原子性操作吗

volatile 是如何保证可见性和有序性的

有了 synchronized 为什么还需要 volatile

如何理解 AQS

什么是 CAS,存在什么问题

CAS 一定有自旋吗

什么是 Unsafe

CAS 在操作系统层面是如何保证原子性的

synchronized 和 ReentrantLock 区别

公平锁和非公平锁的区别

LongAdder 和 AtomicLong 的区别

CountDownLatch、CyclicBarrier 和 Semaphore 的区别

父子线程之间怎么共享/传递数据

有三个线程 T1、T2、T3 如何保证顺序执行?

如何对多线程进行编排

三个线程分别顺序打印 0-100

什么是总线嗅探和总线风暴,和 JMM 有什么关系

CompletableFuture 的底层是如何实现的

ForkJoinPool 和 ThreadPoolExecutor 的区别

有了 InheritableThreadLocal 为什么还需要 TransmittableThreadLocal

AQS 是如何实现线程的等待和唤醒的

如何保证多线程下 i++ 结果正确

Thread.sleep(0) 的作用是什么

有哪些实现线程安全的方案

为什么不建议通过 Executors 构建线程池

线程池的拒绝策略有哪些

线程是如何被调度的

为什么 JDK15 要废弃偏向锁

Java 是如何判断一个线程是否存活的

什么是可重入锁,怎么实现可重入锁

如何实现主线程捕获子线程异常

为什么不能在 try-catch 中捕获子线程的异常

Java 线程出现异常,进程为啥不会退出

什么是 happens-before 原则

happens-before 和 as-if-serial 有啥区别和联系

如何让 Java 的线程池顺序执行任务

ThreadLocal 的应用场景有哪些

ThreadLocal 为什么会内存泄露,如何解决

什么是内存屏障,怎么加的

有了 CAS 为啥还需要 volatile

AQS 的同步队列和条件队列原理

什么是 AQS 的独占模式和共享模式

AQS 为什么采用双向链表

有了 MESI 为啥还需要 JMM

为什么虚拟线程不能用 synchronized

为什么虚拟线程不要和线程池一起用

为什么虚拟线程尽量避免使用 ThreadLocal

synchronized 是非公平锁吗,如何体现的

synchronized 锁能降级吗

如何实现无锁化编程

如何在 Java 中实现高效的异步编程?如何避免回调地狱?

线程池中使用 ThreadLocal 会有哪些潜在风险

动态线程池的原理是什么

什么是伪共享,如何解决伪共享

results matching ""

    No results matching ""