interview
java-concurrency
什么是 Java 的 Semaphore

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机制?

Java 中的锁机制主要包括 synchronized 关键字和显式锁(如 ReentrantLock)。synchronized 是 Java 内置的锁,用于方法或代码块上,通过监视器锁(monitor)实现同步。显式锁如 ReentrantLock 提供更灵活的同步控制,包括可重入特性、公平性设置、条件变量等。

🦆
什么是 CountDownLatch?如何使用?

CountDownLatch 是一种同步工具类,允许一个或多个线程等待一组其他线程完成操作。CountDownLatch 通过一个计数器实现,调用 countDown() 方法减少计数器,调用 await() 方法等待计数器减到零。常用于确保某些活动在其他活动完成后才继续执行,例如等待多个服务启动后再处理请求。

🦆
什么是 CyclicBarrier?如何使用?

CyclicBarrier 是一种同步工具类,允许一组线程相互等待,直到所有线程都到达某个共同点(Barrier)。CyclicBarrier 的构造函数接受一个参与方的数量,调用 await() 方法的线程会等待,直到所有线程都调用了 await() 方法。常用于分阶段任务的并发执行,每个阶段结束时等待所有线程完成。

🦆
什么是 Exchanger?如何使用?

Exchanger 是一个同步点,两个线程可以在此交换彼此的数据。每个线程通过 exchange() 方法提供一个对象并接收另一个线程提供的对象。Exchanger 常用于任务分发和结果收集的场景,例如一个线程生成数据,另一个线程消费数据。