Java 并发编程面试题解析
线程基础
- 解释线程和进程的区别?
进程是操作系统资源分配的基本单位,而线程是 CPU 调度的基本单位。一个进程可以包含多个线程,它们共享进程的资源,但拥有独立的程序计数器、堆栈和局部变量等。
-
Java 中如何创建线程?
-
继承 Thread 类
- 实现 Runnable 接口
- 使用 Callable 和 Future
-
使用线程池
-
线程的生命周期有哪些状态?
新建、就绪、运行、阻塞、死亡
线程同步
- 什么是线程安全问题?
当多个线程访问共享资源,并且其中至少有一个线程会修改该资源时,就会出现线程安全问题。
-
如何解决线程安全问题?
-
同步代码块(synchronized)
- 使用锁机制(Lock)
- 使用原子类
-
使用并发容器
-
synchronized 和 Lock 的区别?
-
synchronized 是 Java 关键字,Lock 是接口
- synchronized 会自动释放锁,Lock 需要手动释放
- Lock 提供更灵活的锁操作,例如可重入锁、读写锁等
线程通信
-
wait() 和 notify() 方法的作用?
-
wait():使当前线程进入等待状态,并释放锁
-
notify():唤醒一个正在等待该对象锁的线程
-
生产者消费者模型的实现方式?
使用阻塞队列(BlockingQueue)可以方便地实现生产者消费者模型。
线程池
-
为什么要使用线程池?
-
降低资源消耗
- 提高响应速度
-
便于管理线程
-
Java 中常用的线程池有哪些?
-
FixedThreadPool
- CachedThreadPool
- ScheduledThreadPool
- SingleThreadExecutor
并发工具类
- CountDownLatch 的作用?
允许一个或多个线程等待其他线程完成操作。
- CyclicBarrier 的作用?
允许一组线程互相等待,直到所有线程都到达某个屏障点。
- Semaphore 的作用?
用于控制同时访问特定资源的线程数量。
暂无评论