`

Semaphore测试

 
阅读更多
package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

/**
 * 操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java并发库的Semaphore可以很轻松完成信号量控制,
 * Semaphore可以控制某个资源可被同时访问的个数
 * ,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。
 * Semaphore维护了当前访问的个数
 * ,提供同步机制,控制同时访问的个数。在数据结构中链表可以保存“无限”的节点,用Semaphore可以实现有限大小的链表
 * 。另外重入锁ReentrantLock也可以实现该功能,但实现上要负责些,代码也要复杂些。
 * 下面的Demo中申明了一个只有5个许可的Semaphore,而有20个线程要访问这个资源,通过acquire()和release()获取和释放访问许可。
 * 
 * Semaphore实现的功能就类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中
 * 的任何一个人让开后,其中等待的另外5个人中又有一个人可以占用了。另外等待的5个人中可以是随机获得优先机会,也可以是按照先来后到的顺序获得机会,
 * 这取决于构造Semaphore对象时传入的参数选项
 * 。单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场合。
 * 
 * @author lhj
 * 
 */
public class TestSemaphore {
	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();
					    System.out.println("-----------------"+semp.availablePermits());
					} catch (InterruptedException e) {
					}
				}
			};
			exec.execute(run);
			//exec.submit(run);
		}
		// 退出线程池  
		exec.shutdown();

	}
}
分享到:
评论

相关推荐

    Semaphore进程间通讯测试源码

    在这个"Semaphore进程间通讯测试源码"中,我们可以看到如何在MFC(Microsoft Foundation Classes)框架下利用Semaphore实现进程间的通信。MFC是微软提供的一套C++类库,方便开发者构建Windows应用程序。 `...

    semaphore完整搭建ansible部署方案

    5. **测试与监控**:在生产环境部署前,务必在测试环境中验证配置和 playbook。启用日志记录和监控功能,以便于排查问题和优化性能。 通过以上步骤,你将能够利用提供的资源成功搭建一个基于 Semaphore 的可视化工...

    semaphore-develop.zip

    Semaphore是一款强大的持续集成/持续部署(CI/CD)工具,主要设计用于自动化软件构建、测试和部署流程。在这个"semaphore-develop.zip"压缩包中,包含的应该是Semaphore的开发源码,这对于理解其内部工作原理、自定义...

    Ansible-semaphore.zip

    5. **多环境支持**:你可以为不同的环境(如开发、测试、生产)设置不同的主机列表,方便切换。 6. **通知集成**:Semaphore 可以与 Slack、邮件等服务集成,实时通知任务执行状态。 7. **易于部署**:Semaphore ...

    利用semaphore实现shm进程通信

    此外,考虑到系统的复杂性和可能的并发问题,开发者还需充分测试,确保通信机制的稳定性和安全性。信号量+共享存储区的IPC方案,尤其适用于需要频繁数据交换且对性能有高要求的应用场景,如实时数据处理系统、分布式...

    Semaphore_TBOX_产品-软件及系统功能

    根据提供的信息,我们可以深入探讨Semaphore_TBOX产品的软件及系统功能,特别是TBoxRTU的相关细节。这是一款专门针对工业自动化领域的远程终端单元(RTU),它不仅具备强大的数据采集能力,还集成了先进的软件工具,使...

    semaphore-2.8.22.tar.gz

    7. **持续集成/持续部署 (CI/CD)**:Semaphore 不仅是一个 Ansible 管理工具,还可以与 Git 等版本控制系统集成,实现自动化测试和部署流程,这对于现代 DevOps 工作流非常有价值。 在 "semaphore-2.8.22" 文件夹中...

    semaphore-demo-ruby-kubernetes:用于Kubernetes的Semaphore演示CICD管道

    这是一个示例应用程序和CI / CD管道,展示了如何使用Semaphore 2.0将微服务构建,测试和部署到Kubernetes。 配料: Ruby Sinatra作为Web框架 RSpec测试 打包在Docker容器中 容器被推送到Docker Hub注册表 部署到...

    Semaphore:简单的 PyTkinter 脚本来运行命令和观察输出(单元测试)

    Semaphore 是一个简单的 Python/Tkinter 应用程序,可帮助监控来自给定命令的状态。 我主要将它用于单元测试。 我把这个小窗口放在我的周边视觉看到发生了什么的地方,因为我并不总是想知道测试失败的确切原因,我...

    并发编程之Tools&CountDownLatch&Semaphore原理与应用1

    并发编程是多线程环境下确保程序正确执行的...而CountDownLatch则用于线程间的协调,让一个线程等待其他线程完成任务,常用于启动框架服务、多线程测试等场景。熟练掌握这两种工具,能有效提升并发程序的效率和正确性。

    多线程测试(是多线程的测试,对学习多线程的朋友有用)

    `Mutex`, `Semaphore`, `Monitor`, `lock`关键字等都是C#提供的同步机制。例如,使用`lock`关键字可以确保同一时间只有一个线程能访问特定的代码块: ```csharp private static object lockObject = new object(); ...

    测试并发小工具

    在IT行业中,尤其是在软件开发领域,测试并发性能是至关重要的环节。并发编程允许程序同时执行多个任务,从而提高系统效率和资源利用率。C#作为.NET框架的主要编程语言,提供了丰富的工具和特性来支持并发编程。下面...

    快手2019秋招笔试试题-测试A试卷

    3. **多线程**:了解线程的概念,掌握Thread类和Runnable接口,知道同步机制(synchronized关键字,wait/notify机制,Lock接口等)以及并发工具类如ExecutorService、Semaphore、CountDownLatch等。 4. **Java测试...

    semaphore-demo-java-spring:使用Java Spring的Semaphore演示CICD管道

    只有一个数据库实体和一个对应的存储库测验测试分为两个类路径(以便将它们作为单独的任务运行): 保存单元测试包含集成测试,在这种情况下为存储库和其余端点测试。信号量上的CI / CD管道信号量管道配置为: 建立...

    多线程文件读写测试

    为了防止数据冲突,需要使用同步机制,如互斥量(mutex)、信号量(semaphore)或者临界区(critical section)。`MiniSpy.clw`文件可能是线程类的定义,包含了线程启动、执行任务以及与主线程通信的相关方法。 ...

    docs:Semaphore 2.0文档

    Semaphore 2.0 是一款强大的持续集成和持续部署(CI/CD)平台,它帮助企业或个人开发者高效地构建、测试和发布软件。Semaphore 2.0 的文档详细介绍了如何使用该服务来自动化软件开发流程,确保代码质量和快速迭代。...

    semaphore-demo-cloud-run:具有Google Cloud Run的Semaphore CICD管道

    这是一个示例应用程序和CI / CD管道,显示了如何使用Semaphore 2.0将无服务器微服务构建,测试和部署到Google Cloud Run。 配料: Ruby Sinatra作为Web框架 RSpec测试 打包在Docker容器中 容器已推送至Google ...

    semaphore-demo-ruby-rails:使用Ruby on Rails的Semaphore演示CICD管道

    然后根据.semaphore/semaphore.yml运行代码扫描和自动测试。 信号量上的CI / CD 如果您不熟悉Semaphore,请随意此存储库并使用它来。 CI管道如下所示: 您可以通过阅读来跟随该项目。 或直接跳到.semaphore/...

    java测试题

    5. **多线程**:学习Thread类和Runnable接口,同步机制(如synchronized关键字、wait()、notify()和notifyAll()方法),以及并发工具类如Semaphore、CountDownLatch等。 6. **集合框架**:熟悉ArrayList、...

    线程安全测试类

    4. **非阻塞同步替代方案**:Java提供了多种非阻塞同步机制,如`java.util.concurrent`包中的`ReentrantLock`、`Semaphore`和`Atomic`类等。这些工具可以在某些情况下提供更好的性能,但使用它们需要更深入的理解和...

Global site tag (gtag.js) - Google Analytics