Java并发面试题, 你使用过哪些 Java 并发工具类?
Java并发面试题, 你使用过哪些 Java 并发工具类?
QA
Step 1
Q:: 你使用过哪些 Java 并发工具类?
A:: 常用的Java并发工具类包括:CountDownLatch、CyclicBarrier、Semaphore、Exchanger、ConcurrentHashMap、BlockingQueue等。这些工具类都位于java.util.
concurrent包中,设计用于简化并发编程中的一些常见问题。
Step 2
Q:: 解释 CountDownLatch 的工作原理?
A:: CountDownLatch 是一个同步辅助类,允许一个或多个线程等待,直到其他线程完成一组操作。CountDownLatch 初始化时使用给定的计数值,主线程调用 await 方法阻塞,直到其他线程调用 countDown 方法使计数值达到零。
Step 3
Q:: 什么是 CyclicBarrier?它与 CountDownLatch 有何区别?
A:: CyclicBarrier 也是一种同步辅助类,它允许一组线程相互等待,直到所有线程都到达某个公共屏障点。不同于 CountDownLatch 的一次性使用,CyclicBarrier 可以重复使用。
Step 4
Q:: 解释 Semaphore 的用法及其应用场景?
A:: Semaphore 是一个计数信号量,用来控制同时访问特定资源的线程数量。它提供 acquire 和 release 方法分别用来获取和释放许可。常见的应用场景包括限流控制、实现连接池等。
Step 5
Q:: ConcurrentHashMap 是如何实现线程安全的?
A:: ConcurrentHashMap 通过分段锁机制(在 Java 8 之前)或 CAS 操作(在 Java 8
及以后)实现线程安全。它允许多个修改操作并发进行,同时提供高效的读操作。
Step 6
Q:: 你如何在 Java 中创建一个线程池?
A:: 可以使用 Executors 工具类创建线程池,例如:FixedThreadPool、CachedThreadPool、SingleThreadExecutor 和 ScheduledThreadPool。也可以使用 ThreadPoolExecutor 类进行自定义线程池的创建。
Step 7
Q:: 解释 BlockingQueue 及其常见实现?
A:: BlockingQueue 是一个支持阻塞插入和删除操作的队列接口,常见实现有 ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue 和 SynchronousQueue。它们在生产者-
消费者模型中非常有用。