package com.bjsxt.height.concurrent019; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; /** * 可以控制系统的流量,拿到信号量的线程可以进入,否则等待。 通过 acquire()、release()获取和释放访问许可。 * */ public class UseSemaphore { public static void main(String[] args) { // 线程池 ExecutorService exec = Executors.newCachedThreadPool(); // 只能5个线程同时访问 final Semaphore semp = new Semaphore(5); // 模拟20个客户端访问 for (int index = 0; index < 20; index++) { final int NO = index; Runnable run = new Runnable() { public void run() { try { // 获取许可 semp.acquire(); System.out.println("Accessing: " + NO); //模拟实际业务逻辑 Thread.sleep((long) (Math.random() * 10000)); // 访问完后,释放 semp.release(); } catch (InterruptedException e) { } } }; exec.execute(run); } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //System.out.println(semp.getQueueLength()); // 退出线程池 exec.shutdown(); } }
相关推荐
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
2. **Semaphore**:信号量,用于限制同时访问特定资源的线程数量。 3. **BlockingQueue**:阻塞队列,线程安全的数据结构,当队列为空时,取元素的线程会被阻塞,直到有元素放入;反之,当队列满时,放入元素的线程...
- **信号量(Semaphore)**:控制同时访问某个资源或服务的数量。 - **屏障(CyclicBarrier)**:多个线程等待到达某个公共屏障点。 - **完成阶段(CompletionStage)**:表示计算任务的完成阶段,支持链式任务。 - ...
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
文档明确指出,Doug Lea为J2SE 5.0引入的java.util.concurrent包提供了一套精巧的同步器框架,这套框架极大地简化了并发控制的实现,并且在多个领域提供了高效的同步原语,如锁、条件变量、信号量、事件标志等。...
### Java.util.concurrent_您不知道的5件事 #### 1. Semaphore(信号量) - **定义与作用**:`Semaphore` 类...无论是简单的信号量控制还是复杂的多线程同步逻辑,`java.util.concurrent` 包都能提供合适的解决方案。
8. **Semaphore**:信号量,控制同时访问特定资源的线程数量,用来解决资源争抢问题。 9. **ThreadPoolExecutor**:线程池的具体实现,可以通过配置核心线程数、最大线程数、任务队列等参数来定制线程池的行为。 ...
- `Semaphore`:信号量,用于限制同时访问特定资源的线程数量。 4. **原子变量类**: - `AtomicInteger`, `AtomicLong` 等:提供原子操作的整数和长整型变量,适用于在多线程环境下实现无锁编程。 5. **锁接口和...
Semaphore是一个信号量,用于控制同时访问特定资源的线程数量。它维护了一个许可证池,当线程获取一个许可证后才能执行,释放后归还给许可证池。Phaser是一个更灵活的同步工具,可以注册线程并在特定阶段进行同步,...
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
Java提供了丰富的并发工具类,如`Semaphore`信号量、`CyclicBarrier`屏障、`CountDownLatch`倒计时器和`Future`未来结果等,它们可以帮助我们设计出更灵活、高效的并发策略。此外,`java.util.concurrent`包下的`...
JAVA多线程--信号量(Semaphore) 信号量(Semaphore)是一种多线程环境下的设施,负责协调各个线程,以保证它们能够正确、合理地使用公共资源。从概念上讲,信号量维护了一个许可集。 信号量的类型有两种:单值信号...
分布式锁与信号量 包含测试用例和实验的JAVA代码 package com.example.springbootdemo; import com.example.springbootdemo.commons.Semaphore.DistributedSemaphore; import ...
3. **信号量(Semaphores)和锁**:`java.util.concurrent.locks`包提供了`Semaphore`和`ReentrantLock`等同步原语,可以用来控制并发访问资源的数量。 4. **条件变量(Condition)**:`java.util.concurrent.locks...
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
- `java.util.concurrent.Semaphore`用于控制对有限资源的访问。 ##### 5. 阻塞队列 - `java.util.concurrent.BlockingQueue`接口用于在线程间共享数据。 ##### 6. 条件变量 - `java.util.concurrent.locks....
`Semaphore`是用来控制对资源访问的计数信号量。它可以用来控制多个线程对共享资源的访问数量。 **2.4.4 `Future`与`FutureTask`** `Future`接口代表一个异步计算的结果,可以通过它来获取异步任务的结果。`...
为了解决生产者和消费者之间的同步和通信问题,Java提供了几种不同的实现方式,包括synchronized关键字、Condition接口、Lock接口以及信号量(Semaphore)和阻塞队列(BlockingQueue)。 ### 1. synchronized关键字...