`

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进程间通讯测试源码,CreateSemaphoreW,OpenSemaphore,ReleaseSemaphore,WaitForSingleObjectEx

    SemaphoreTest.kt.zip

    使用Kotlin编写的Semaphore测试程序

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

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

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

    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/...

    semaphore-demo-android

    这是一个示例项目和CI / CD管道,显示了如何使用Semaphore 2.0构建,测试和部署Android应用程序。 信号量上的CI / CD 如果您不熟悉Semaphore,请随意此存储库并使用它来。 项目设置 创建一个并更新。 创建一个...

    semaphore-demo-javascript:使用Node.js,TypeScript,Nest.js和React的Semaphore演示CICD管道

    示例应用程序和CI / CD管道显示了如何在Semaphore 2.0上运行JavaScript项目。 项目由基于Nest.js的Node.js服务器和React客户端组成。 代码是用TypeScript编写的。 信号量上的CI / CD 分叉此存储库并使用它来。 CI...

    semaphore-demo-react-native:针对iOS和Android的React Native项目的Semaphore演示CI管道

    使用React Native的信号量演示CI / CD管道示例应用程序和CI / CD管道显示了如何在Semaphore 2.0上运行React Native项目。 使用。信号量上的CI / CD 分叉此存储库并使用它来。 CI管道将如下所示: 要仅运行iOS CI,请...

    semaphore-demo-zeit-now:带有Semaphore和Zeit Now的演示CICD管道

    示例如何构建一个无服务器API函数并使用Semaphore将其部署到Zeit Now。 信号量上的CI / CD 分叉此存储库并使用它来。 转到您的即时信息中心,然后。 您应该在页面中间看到一个稍微隐藏的字段,上面写着“通过输入...

    semaphore-demo-ios-swift-xcode:使用Swift和Xcode的iOS信号量演示CI管道

    在真实设备或Semaphore上运行示例应用程序之前,您需要配置代码签名。 首先,您将需要配置Xcode项目以使用您的开发团队。 打开TallestTowers.xcodeproj并为每个TallestTowers , TallestTowersTests , ...

    test-boosters:自动并行化-在多个作业中运行测试文件

    gem install semaphore_test_boosters 什么是测试助推器 测试助推器采用您的测试套件,并将测试文件拆分为多个作业。 这使您可以在多台构建机之间快速并行化测试套件。 例如,让我们看一下rspec_booster --job 1/10...

    semaphore-demo-cicd-kubernetes:CICD for Docker 和 Kubernetes Book 的配套演示

    带有 Docker 和 Kubernetes 的 CI/CD 配套演示书 在您的工作站中运行它 $ docker-compose up --build ...注册 Semaphore 并安装 。 将项目添加到信号量: $ sem init 部署到云端 需要的云服务: K

    嵌入式内核M3-飞鸟

    内核目前处于测试阶段,现在发布运行在 stm32 处理器上的第一个测试版本。 主要特点 IPC 支持常见IPC机制,semaphore\mailbox\message、mutex、eventset 充分总结各种机制的共性和特性,基于通用IPC控制结构和...

    进程通讯总结及测试

    进程间通讯不仅指进程之间传递一些message, 还包括进程之间的合作等。...5.信号量(semaphore) 6.套接口(Socket) 各种手段的详细说明请参考《unix进程通信+》 我们主要对共享内存方式进行学习:

    semaphore-ng2-webpack

    此代码使用Webpack设置Angular 2项目是一种简单的方法,同时还提供了单元测试的配置。 要安装所有依赖项,请运行: npm i 对于单项无头测试,请使用: npm run test:headless 要在浏览器用户中运行代码: npm ...

    Karma:JavaScript 测试运行器-开源

    Karma 的主要目标是为开发人员提供高效的测试环境。 该环境是他们不必设置大量配置的环境,而是开发人员只需编写代码并从他们的测试中获得即时反馈的地方。... 与 Jenkins、Travis 或 Semaphore 的简单集成。

    Karma:JavaScript的测试运行器-开源

    Karma的主要目标是为开发人员带来一个高效的测试环境。 在这种环境中,他们不必设置大量的配置,而在这里,开发人员可以编写代码并从测试中获得即时反馈。... 与Jenkins,Travis或Semaphore的简单集成。

Global site tag (gtag.js) - Google Analytics