`

java锁之Semaphore(信号量,限制并发数量)

    博客分类:
  • java
 
阅读更多
Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。
使用Semaphore可以控制同时访问资源的线程个数。
acquire()尝试获取许可证,没有获得的线程会阻塞
release()操作完之后释放资源到资源池中
public static void main(String[] args) throws Exception {
             // 线程池
             ExecutorService exec = Executors.newCachedThreadPool();
             // 只能5个线程同时访问
             final Semaphore semp = new Semaphore(5);
             final CountDownLatch latch = new CountDownLatch(20);
              // 模拟20个客户端访问
           for(int i=0;i<20;i++){
        	   exec.execute(new Runnable() {
				@Override
				public void run() {
					try {
						semp.acquire();
						synchronized (latch) {
							Thread.currentThread().setName("Thread--"+latch.getCount());
							latch.countDown();
						}
							Thread.sleep(4000);
							System.out.println(Thread.currentThread().getName()+"is working");
							semp.release();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			});
           }
          exec.shutdown();
          latch.await();
          System.out.println("---work is done----");
         

    }

 

分享到:
评论

相关推荐

    java并发之Semaphore信号量.md

    Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...

    Java并发编程Semaphore计数信号量详解

    Java并发编程中,Semaphore(信号量)是一种高效的同步机制,允许一定数量的线程访问某个资源。在本文中,我们将详细介绍Java并发编程Semaphore计数信号量的工作原理和应用。 一、Semaphore的概念 Semaphore是Java...

    async-semaphore:基于Java并发信号量的计数信号量

    基于 Java 的并发信号量的计数信号量。 安装 通过 npm 安装模块: npm install async-semaphore 快速示例 // fairness false var Semaphore = require ( 'async-semaphore' ) ; var semaphore = new Semaphore ( ...

    Java进程信号量机制的实验程序

    - 这个实验程序展示了如何利用信号量限制并发执行的线程数量,以及线程之间的同步。当线程池满时,额外的线程会被阻塞,直到其他线程释放资源。 4. **信号量的用途**: - 资源管理:信号量可以用来控制对有限资源...

    使用信号量(Semaphore)实现线程的同步

    信号量(Semaphore)是操作系统中一种重要的同步机制,它用于管理多个线程对共享资源的访问,以防止并发执行时产生竞态条件。在多线程编程中,当多个线程试图同时访问一个有限的资源时,信号量可以帮助我们协调这些...

    Java 信号量Semaphore的实现

    Java 信号量Semaphore是Java并发编程中的一种机制,用于控制多个线程的并发执行。Semaphore的实现主要是通过计数器来实现的,每个Semaphore对象都维护着一个计数器,用于记录当前可用的许可证数量。 在Java中,...

    JAVA 多线程之信号量(Semaphore)实例详解

    **JAVA 多线程之信号量Semaphore实例详解** 在Java多线程编程中,信号量Semaphore是一种非常重要的同步工具,用于控制对公共资源的访问。Semaphore类位于`java.util.concurrent`包下,它允许我们限制同时访问特定...

    redis实现分布式锁与java信号量.zip

    Redis作为一种高效、轻量级的内存数据存储,常被用作实现分布式锁的工具,而Java的信号量机制则是控制并发访问的一种策略。本篇文章将深入探讨Redis如何实现分布式锁以及Java中的信号量概念,并结合实际应用进行详细...

    java并发核心Semaphore 的使用思路.docx

    Semaphore是Java并发编程中的一种重要工具,它是一个计数信号量,可以用来限制对共享资源的访问权限。在Java的`java.util.concurrent`包中,Semaphore类提供了对多个线程并发访问控制的能力,允许我们设置一个固定的...

    java并发编程实战源码,java并发编程实战pdf,Java

    3. **并发控制**:Java提供了多种并发控制工具,包括synchronized、wait()、notify()、notifyAll()、ReentrantLock(可重入锁)、Semaphore(信号量)和CountDownLatch(倒计时器)等。这些工具用于协调不同线程的...

    Java 信号量编程实践

    在Java中,`java.util.concurrent.Semaphore`类为我们提供了信号量的功能,它允许我们限制同时访问某个资源的线程数量,从而实现线程同步和资源管理。 信号量主要包含两种类型:可重用信号量(非递减信号量)和二...

    JAVA多线程--信号量(Semaphore)_.docx

    Java并发库Semaphore可以很轻松完成信号量掌握,Semaphore可以掌握某个资源可被同时访问的个数,通过acquire()猎取一个许可,假如没有就等待,而release()释放一个许可。 例如,在Windows下可以设置共享文件的最大...

    Java并发编程之Semaphore(信号量)详解及实例

    Java并发编程之Semaphore(信号量)详解及实例 在 Java 中,Semaphore(信号量)是一种非常有用的并发编程工具,主要用于控制访问某些资源的线程数目。下面,我们将详细介绍 Semaphore 的原理、实现和实例。 ...

    Java并发编程(23)并发新特性-信号量Semaphor

    信号量(Semaphore)是Java并发库中的一种工具类,它提供了一种控制多个线程对共享资源访问的方式,从而实现高级别的同步。在Java 5引入并发包`java.util.concurrent`后,信号量作为`Semaphore`类被添加,成为并发...

    Java中Semaphore(信号量)的使用方法

    Java中Semaphore(信号量)的使用方法 Semaphore(信号量)是一种非常重要的并发访问控制机制,它可以用来保护一个或者多个共享资源的访问。Semaphore内部维护了一个计数器,其值为可以访问的共享资源的个数。一个...

    Java编程技巧(信号量,管道)

    虽然Java标准库没有直接提供同步互斥结构,但它提供了基于对象锁的`wait()`和`notify()`方法,这使得我们可以实现Dijkstra的计数信号量概念。 信号量是一种在多线程编程中用于控制资源访问的机制。在Java中,可以...

    分布式锁与信号量.zip

    而信号量则常用于限制并发访问的数量,例如限制同一时间的在线用户数量或者并发执行的任务数。 了解了这些基本概念后,"分布式锁与信号量.pdf"和"项目说明.pdf"这两份文档可能包含更深入的理论讲解和具体的实现案例...

    《java 并发编程实战高清PDF版》

    其中包括`Semaphore`(信号量)用于限制同时访问特定资源的线程数量,`CountDownLatch`(倒计时器)用于一次性阻塞多个线程,直到某个事件发生,以及`CyclicBarrier`(循环栅栏)让一组线程等待其他线程到达特定点后...

    Java中的Semaphore:深入理解与应用实践

    Semaphore 是Java并发编程中实现信号量机制的重要工具。它通过维护一个许可集来控制同时访问特定资源的线程数量,从而避免资源竞争和潜在的性能问题。通过合理使用 Semaphore,可以有效地管理多线程对共享资源的访问...

    java并发编程实践pdf笔记

    - `java.util.concurrent`包提供了一系列的并发工具类,如`Semaphore`(信号量)、`CountDownLatch`(计数器)、`CyclicBarrier`(回环栅栏)等,它们为复杂的并发场景提供了强大的支持。 - **并发集合** 如`...

Global site tag (gtag.js) - Google Analytics