多线程面试题整理

张开发
2026/4/16 4:34:40 15 分钟阅读

分享文章

多线程面试题整理
目录线程安全什么是线程安全如何解决线程安全问题线程的生命周期线程阻塞问题线程饥饿问题活锁多线程线程和进程多线程的上下文切换并发与并行同步方法和同步块单例模式的线程安全性Synchronized关键字和Lock区别Synchronized关键字和Volatile关键字区别Synchronized锁升级过程ReentrantLock与synchronizedSynchronized的实现原理sleep()和wait()Thread.sleep(0)的作用start()和run()线程死锁自旋锁AQS支持的同步方式什么是CAS以及产生的问题Java中如何获取到线程dump文件虚拟机栈和本地方法栈为什么是私有的程序计数器为什么是私有的Hashtable的size()方法Semaphore作用CyclicBarrier和CountDownLatch的区别悲观锁和乐观锁伪共享线程池Java中用到的线程调度算法常见的线程池及适用场景线程池工作队列线程池的优点线程安全什么是线程安全程序执行前和执行后的数据都是一致的,那么就是线程安全的。线程安全有几个级别:不可变,像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,所以这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用。绝对线程安全,不管运行时环境如何,调用者都不需要额外的同步措施。要做到这一点通常需要付出许多额外的代价,Java中标注自己是线程安全的类,实际上绝大多数都不是线程安全的,不过绝对线程安全的类,Java中也有,比方说CopyOnWriteArrayList、CopyOnWriteArraySet。相对线程安全,相对线程安全也就是通常所说的线程安全,像Vector这种,add、remove方法都是原子操作,不会被打断但也仅限于此,如果有个线程在遍历某个Vector、有个线程同时在add这个Vector,99%的情况下都会出现ConcurrentModificationException,也就是failfast机制。

更多文章