并发编程
题目范围:第 173-281 题,共 109 道题目
核心考点:线程生命周期 · synchronized · volatile · CAS · AQS · 线程池 · 死锁 · JMM内存模型 · happens-before
💡 提示: 使用左侧导航栏浏览本分类下的所有题目,或使用页面顶部的搜索功能快速查找。
Table of contents
- 创建线程有几种方式?
- 线程有几种状态,状态之间的流转是怎样的?
- Java是如何判断一个线程是否存活的?
- Thread.sleep(0)的作用是什么?
- 什么是守护线程,和普通线程有什么区别?
- 什么是多线程中的上下文切换?
- 线程是如何被调度的?
- 线程同步的方式有哪些?
- 什么是死锁,如何解决?
- run、start、wait、sleep、notify、notifyAll区别
- 线程有哪些结束方式?
- 如何打印线程栈信息?
- 什么是并发,什么是并行?
- 能不能谈谈你对线程安全的理解?
- 有哪些实现线程安全的方案
- 并发编程中的原子性和数据库ACID的原子性一样吗?
- 指令重排序
- final关键字与可见性是否有关
- 同步与异步有何区别?
- 什么是Java内存模型(JMM)?
- 什么是happens-before原则?
- happens-before和as-if-serial有啥区别和联系?
- 有了MESI为啥还需要JMM?
- 什么是总线嗅探和总线风暴,和JMM有什么关系?
- 到底啥是内存屏障?到底怎么加的?
- volatile能保证原子性吗?为什么?
- 有了synchronized为什么还需要volatile
- volatile如何保证可见性和有序性
- volatile关键字与禁止重排序如何解决多线程可见性
- 什么是CAS?存在什么问题?
- 介绍下CAS
- CAS操作类
- CAS一定有自旋吗?
- CAS在操作系统层面是如何保证原子性的
- 有了CAS为啥还需要volatile
- ABA问题
- 什么是Unsafe?
- synchronized是怎么实现的?
- synchronized锁的是什么?
- synchronized是如何保证原子性、可见性、有序性的?
- synchronized的锁优化是怎样的?
- synchronized的锁升级过程是怎样的?
- synchronized升级过程中有几次自旋?
- synchronized的锁能降级吗?
- 为什么JDK15要废弃偏向锁?
- synchronized是否可重入
- synchronized是非公平锁吗,那么是如何体现的?
- synchronized和ReentrantLock的区别
- synchronized和lock区别
- int a = 1是原子性操作吗
- 如何保证多线程下i++结果正确
- 如何理解AQS?
- AQS的同步队列和条件队列原理
- AQS是如何实现线程的等待和唤醒的?
- AQS为什么采用双向链表?
- 什么是AQS的独占模式和共享模式?
- AQS操作类有哪些?
- 什么是可重入锁,怎么实现可重入锁?
- 可重入锁的底层实现
- 公平锁和非公平锁的区别
- Lock是否公平,能否实现非公平,如何实现?
- ReentrantLock增加了哪些高级功能?
- 什么是线程池,如何实现的?
- ForkJoinPool和ThreadPoolExecutor的区别是什么?
- 线程池的拒绝策略有哪些?
- 为什么不建议通过Executors构建线程池?
- 线程数设定成多少更合适?
- 如何让Java的线程池顺序执行任务?
- 如何实现一个动态线程池?
- 线程池多线程操作对象是否需要加volatile保障可见性?
- 线程池有哪些状态?如何获取多线程并发执行结果?
- 线程池的原理是什么?各参数有什么作用?
- 线程池有哪些参数?分别代表什么含义
- Future 如何通过阻塞等待获取结果?
- 如何安全地中断一个正在运行的线程?
- CompletableFuture的底层是如何实现的?
- 如何对多线程进行编排?
- CountDownLatch、CyclicBarrier、Semaphore区别?
- LongAdder和AtomicLong的区别?
- 什么是ThreadLocal,如何实现的?
- ThreadLocalMap的数据结构
- ThreadLocalMap的冲突解决机制
- ThreadLocalMap的扩容机制
- ThreadLocal为什么会导致内存泄漏?如何解决?
- ThreadLocal的key是弱引用,在get()时发生GC后key会是null吗?
- ThreadLocal的应用场景有哪些?
- 有了InheritableThreadLocal为啥还需要TransmittableThreadLocal?
- 探测式清理和启发式清理
- 父子线程之间怎么共享、传递数据?
- 如何理解 Fork/Join 框架?
- 谈谈你对时间轮的理解。
- 阻塞队列的有界与无界是什么意思?
- 为什么不能在try-catch中捕获子线程的异常?
- 如何实现主线程捕获子线程异常?
- Java线程出现异常,进程为啥不会退出?
- 有三个线程T1,T2,T3如何保证顺序执行?
- 三个线程分别顺序打印0-100
- JDK21中的虚拟线程是怎么回事?
- 为什么虚拟线程不能用synchronized?
- 为什么虚拟线程不要和线程池一起用?
- 为什么虚拟线程尽量避免使用ThreadLocal?