多线程(并发编程)和线程安全几乎是每场面试必问的问题,下面面试题是从字节跳动、腾讯和阿里等几百份的面试题整理的,面试时出现频率很高的。
目录
CAS 锁原理是什么?它跟 CPU 底层的指令有关系吗?ABA 问题是怎么回事?
说说 synchronized 和 cas 的区别和联系。synchronized 底层是怎么实现的?
具体讲一下 synchronized 和 reentrantlock。
什么是锁?有哪些常见的锁?(介绍锁的概念以及在 Java 中常见的锁类型等)
synchronized 和 ReentrantLock 有什么区别(对比分析这两种锁在实现机制、使用场景、特性等方面的差异)?
ReadWriteLock 的作用(说明读写锁在并发编程中的具体作用、适用场景等)?
多线程一等多怎么实现(CountDownLatch/Future/CyclicBarrier/join 方法)?
中止线程的四种方式是什么?interrupt 方法在线程执行任务过程中还能使用吗?
Java 中怎么开启一个线程?Runnable 和 Callable 区别?
说一下 keepalive 的含义,线程池是如何让非核心线程在达到心跳时间后消亡的?
线程池的队列是阻塞的吗?如果有一个线程一直向线程池提交任务,如何阻塞该线程?
线程池当启动最大线程数,吞吐量下来了,线程会不会回收?怎么回收的?哪些线程被回收?
请介绍 hashmap 非线程安全,1.8 改尾插法的原因?
HashMap 是线程安全的吗?HashSet 如何保证唯一性?
ConcurrentHashMap 它的并发度大小是怎样的?ConcurrentHashMap 的 get 方法是否上锁?
concurrenthashmap 怎么实现并发(详细讲解 concurrenthashmap 在多线程环境下实现并发访问及操作的机制等)。
CAS 原语的实现原理?CAS 原语一定比锁的性能好吗?操作系统是怎么保证缓存一致性的?
用 AQS 实现的计数器和原子类 AtomicInteger 实现原理是什么?它们的优劣比较?
volatile 用在哪里,有什么作用(说明 volatile 关键字在 Java 并发编程中的适用场景及起到的具体作用等)?
多个线程访问一个数据,怎么保证线程安全(从通用的角度阐述在 Java 中保证多个线程访问同一数据时的线程安全策略、方法等)。
多个线程访问账户金额,怎么保证金额数据一致(结合具体的账户金额场景,说明确保数据一致性的思路、方法等)。
解释一下线程安全的概念(准确清晰地解释线程安全在 Java 编程语境下的含义)。
请介绍线程池,包括它的参数、运行原理、提交任务时的执行顺序,设计依据是什么?让你实现一些缓存线程池,你怎么设计?
Java 对锁的优化机制是怎样的?无锁是怎么回事?
Java 为了提高锁的性能有多种优化机制。
首先是锁消除。在某些情况下,编译器可以通过逃逸分析判断一个对象不会被多个线程访问,那么这个对象的锁操作就可以被消除。例如,在一个方法内部定义的对象,它没有被返回,也没有被其他线程访问的可能,此时编译器就可以将这个对象上的锁操作去掉。
然后是锁粗化。如果有一系列连续的对同一个对象的加锁和解锁操作,JVM 会把这些操作合并成一个范围更大的锁,
标签:面试题,Java,哪些,CAS,安全,线程,数百份,多线程 From: https://blog.csdn.net/linweidong/article/details/145016450