Java 并发面试题, 什么是 Java 的 Semaphore?
Java 并发面试题, 什么是 Java 的 Semaphore?
QA
Step 1
Q:: 什么是 Java 的 Semaphore?
A:: Java 的 Semaphore 是一个用于控制同时访问特定资源的线程数量的同步工具。它通过维护一组许可(permits),每个 acquire() 方法调用都会从许可中获取一个,如果没有许可,调用线程会被阻塞,直到有许可可用。release()
方法则会归还一个许可。Semaphore 通常用于限制对某些资源的并发访问,例如数据库连接池、文件访问等。
Step 2
Q:: Semaphore 的两种主要模式是什么?
A:: Semaphore 有两种主要模式:公平模式和非公平模式。公平模式按照线程请求许可的顺序分配许可,而非公平模式则可以更高效地分配许可,但不保证线程获取许可的顺序。通过构造函数的第二个参数可以设置这两种模式。
Step 3
Q:: 如何创建一个初始许可数为 3
的 Semaphore?
A:: 可以通过以下代码创建一个初始许可数为 3
的 Semaphore:
Semaphore semaphore = new Semaphore(3);
Step 4
Q:: Semaphore 与 ReentrantLock 有何不同?
A:: Semaphore 和 ReentrantLock 都用于线程同步,但它们的用途有所不同。Semaphore 用于控制同时访问某个资源的线程数,而 ReentrantLock 是一种可重入互斥锁,用于保护临界区代码的并发执行。Semaphore 允许多个线程访问共享资源,而 ReentrantLock 只允许一个线程访问。
用途
在面试中考察 Semaphore 相关知识的原因是它在多线程编程中扮演着重要角色,能够有效地控制并发访问特定资源的线程数量。在实际生产环境中,Semaphore 常用于限流和资源管理,例如控制同时访问数据库连接池的线程数、限制同时下载文件的线程数等。这些场景需要精确控制并发度以保证系统的稳定性和高效性。\n相关问题
🦆
什么是 Java 中的锁Lock机制?▷
🦆
什么是 CountDownLatch?如何使用?▷
🦆
什么是 CyclicBarrier?如何使用?▷
🦆
什么是 Exchanger?如何使用?▷