吐血整理的100道Java多线程&并发面试题
- 前言
- 1、Java中实现多线程有几种方法
- 2、继承 Thread 类 流程
- 3、实现 Runnable 接口
- 4、ExecutorService、 Callable、 Future 有返回值线程
- 5、基于线程池的方式
- 6、4 种线程池
- 7、如何停止一个正在运行的线程
- 8、notify()和notifyAll()有什么区别?
- 9、sleep()和wait() 有什么区别?
- 10、volatile 是什么?可以保证有序性吗?
- 11、Thread 类中的start() 和 run() 方法有什么区别?
- 12、为什么wait, notify 和 notifyAll方法不在thread类里面?
- 13、为什么wait和notify方法要在同步块中调用?
- 14、Java中interrupted 和 isInterrupted方法的区别?
- 15、Java中synchronized 和 ReentrantLock 有什么不同?
- 16、有三个线程T1,T2,T3,如何保证顺序执行?
- 17、SynchronizedMap和ConcurrentHashMap有什么区别?
- 18、什么是线程安全
- 19、Thread类中的yield方法有什么作用?
- 20、Java线程池中submit() 和 execute()方法有什么区别?
- 21、说一说自己对于 synchronized 关键字的了解
- 22、说说自己是怎么使用 synchronized 关键字,在项目中用到了吗?synchronized关键字 最主要的三种使用方式?
- 23、什么是线程安全?Vector是一个线程安全类吗?
- 24、volatile关键字的作用?
- 25、简述一下你对线程池的理解
- 26、线程生命周期(状态)
- 27 **新建状态(NEW)**
- 28、就绪状态(RUNNABLE)
- 29、运行状态(RUNNING)
- 30、阻塞状态(BLOCKED)
- 31、线程死亡(DEAD)
- 32、终止线程 4 种方式
- 33、start 与 run 区别
- 34、JAVA 后台线程
- 35、什么是乐观锁
- 36、什么是悲观锁
- 37、什么是自旋锁
- 38、Synchronized 同步锁
- 39、ReentrantLock
- 40、Condition 类和 Object 类锁方法区别
- 41、tryLock 和 lock 和 lockInterruptibly 的区别
- 42、Semaphore 信号量
- 43、Semaphore 与 ReentrantLock 区别
- 44、可重入锁(递归锁)
- 45、公平锁与非公平锁
- 46、ReadWriteLock 读写锁
- 47、共享锁和独占锁
- 48、重量级锁(Mutex Lock)
- 49、轻量级锁
- 50、偏向锁
- 51、分段锁
- 52、锁优化
- 53、线程基本方法
- 54、线程等待(wait)
- 55、线程睡眠(sleep)
- 56、线程让步(yield)
- 57、线程中断(interrupt)
- 58、Join 等待其他线程终止
- 59、为什么要用 join()方法?
- 60、线程唤醒(notify)
- 61、线程其他方法
- 62、进程
- 63、上下文
- 64、寄存器
- 65、程序计数器
- 66、PCB-“切换桢”
- 67、上下文切换的活动
- 68、引起线程上下文切换的原因
- 69、同步锁
- 70、死锁
- 71、线程池原理
- 72、线程复用
- 73、线程池的组成
- 74、拒绝策略
- 75、Java 线程池工作过程
- 76、JAVA 阻塞队列原理
- 77、Java 中的阻塞队列
- 78、ArrayBlockingQueue(公平、非公平)
- 79、LinkedBlockingQueue(两个独立锁提高并发)
- 80、PriorityBlockingQueue(compareTo 排序实现优先)
- 81、DelayQueue(缓存失效、定时任务 )
- 82、SynchronousQueue(不存储数据、可用于传递数据)
- 83、LinkedTransferQueue
- 84、LinkedBlockingDeque
- 85、在 java 中守护线程和本地线程区别
- 86、线程与进程的区别?
- 87、什么是多线程中的上下文切换?
- 88、死锁与活锁的区别?
- 89、Java 中用到的线程调度算法是什么?
- 90、什么是线程组,为什么在 Java 中不推荐使用?
- 91、为什么使用 Executor 框架?
- 92、在 Java 中 Executor 和 Executors 的区别?
- 93、如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长?
- 94、什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?
- 95、Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优 势?
- 96、什么是 Executors 框架?
- 97、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者 模型?
- 98、什么是 Callable 和 Future?
- 99、什么是 FutureTask?使用 ExecutorService 启动任务。
- 100、什么是并发容器的实现?
前言
2022年接近年底了,相信绝大多数小伙伴们跳操的心已经蠢蠢欲动了,那么罡哥给大家吐血整理了Java领域各个知识点的面试题,把碎片的知识,系统化的整理,有代码有讲解,通俗易懂,最重要的好记!!!希望能够为小伙伴们的面试保驾护航,争取拿到自己期望的薪资。如果对你有用,请点赞关注收藏哦~
1、Java中实现多线程有几种方法
- 继承
Thread
类; - 实现
Runnable
接口; - 实现
Callable
接口通过FutureTask
包装器来创建Thread线程;
使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService来 管理前面的三种方式)。
2、继承 Thread 类 流程
Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。 启动线程的唯一方法就是通过 Thread 类的 start()实例方法。 start()
方法是一个 native 方法,它将