java线程常考面试题
时间: 2023-10-28 15:56:44 浏览: 48
1. 什么是线程?线程与进程的区别是什么?
线程是进程的一部分,是CPU调度的最小单位,它可以并发执行。进程是操作系统资源分配的最小单位,它是程序的一次执行过程,包括了程序计数器、栈、数据段等多个内存区域。线程共享进程的内存空间,而进程之间是相互独立的。
2. 线程的状态有哪些?分别表示什么?
线程的状态包括:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。
- 新建状态:线程创建后,尚未启动时的状态。
- 就绪状态:线程已经创建,并已经调用了 start() 方法,但还没有被分配到 CPU 执行。
- 运行状态:线程正在 CPU 上执行。
- 阻塞状态:线程由于某种原因暂时停止执行,直到唤醒才能转为就绪状态。
- 死亡状态:线程执行完 run() 方法后进入此状态。
3. 线程的实现方式有哪些?分别有什么优缺点?
线程的实现方式包括继承 Thread 类和实现 Runnable 接口两种方式。
- 继承 Thread 类的优点是编写简单,缺点是不能再继承其他类。
- 实现 Runnable 接口的优点是可以继承其他类,缺点是编写稍微麻烦一些。
4. 线程同步的方法有哪些?分别有什么优缺点?
线程同步的方法有 synchronized 关键字、Lock 接口、volatile 关键字等。
- synchronized 关键字的优点是简单易用,缺点是在竞争激烈的情况下会造成性能问题。
- Lock 接口的优点是可以更细粒度地控制同步,缺点是使用稍微复杂一些。
- volatile 关键字的优点是简单易用,缺点是只能保证可见性,不能保证原子性。
5. 什么是线程池?它的好处是什么?
线程池是一种管理和重用线程的机制。在创建一个线程的代价比较高的情况下,使用线程池可以避免频繁地创建和销毁线程,提高程序的性能。线程池的好处包括减少线程创建和销毁的开销、可控制并发线程数、能够提供更好的响应速度、提高线程的复用性等。