`
zzhonghe
  • 浏览: 248140 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Semaphore--给队列加上许可证

    博客分类:
  • Java
 
阅读更多
在如下的场景,我们可能需要加入类似许可证的实现:

有一个资源队列,不管在什么情况下,都只允许指定数目的资源被使用,资源被使用,并归还之后,新的任务才能使用这些资源。

public class TestSemaphore {
	static int count=0;
	Random r=new Random(47);
	BlockingQueue<Integer> queue=new LinkedBlockingQueue<Integer>();
	[b]Semaphore s=new Semaphore(5);[/b]
	
	public void testSemaphore(){
		for(int i=0;i<8;i++){
			try {
				queue.put(i);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		ExecutorService se=Executors.newCachedThreadPool();
		for(int i=0;i<40;i++){
			se.execute(new Consumer());
		}
	}
	
	public static void main(String args[]){
		new TestSemaphore().testSemaphore();
	}
	
	
	class Consumer implements Runnable{
		int id=count++;
		public void run() {
			try {
				[b]s.acquire();[/b]
				int value=queue.take();
				out.println("#"+id+" Take value ["+value+"], Left "+queue.toString()+"");
				TimeUnit.SECONDS.sleep(r.nextInt(60));
				
				queue.put(value);
				out.println("#"+id+" Return back value ["+value+"], Left "+queue.toString()+"");
				[b]s.release();[/b]
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
	
	
}
分享到:
评论

相关推荐

    semaphore-develop.zip

    在这个"semaphore-develop.zip"压缩包中,包含的应该是Semaphore的开发源码,这对于理解其内部工作原理、自定义功能或贡献代码到开源项目来说是极其宝贵的资源。 Semaphore的核心特性在于它的可视化部署服务,它...

    semaphore-2.8.22.tar.gz

    在 "semaphore-2.8.22.tar.gz" 文件中,我们获得了 Semaphore 的源代码,版本号为 2.8.22。 Semaphore 项目与 Ansible 的集成允许用户通过图形界面来执行常见的 Ansible 功能,如创建和管理 Playbooks、组织主机和...

    Python库 | semaphore-0.4.46.zip

    Semaphore-0.4.46是一个特定版本的Python实现,它提供了对信号量操作的基本接口。在这个版本中,我们可以期待一些关键功能和改进,如: 1. **初始化**:Semaphore对象在创建时可以设置一个初始值,这个值表示可以...

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

    Kubernetes的Semaphore CI / CD演示 这是一个示例应用程序和CI / CD管道,展示了如何使用Semaphore 2.0将微服务构建,测试和部署...docker run -p 80:4567 semaphore-demo-ruby-kubernetes curl localhost &gt; hello worl

    semaphore-nodejs:在 node.js 中使用 semaphore.co API 的小型客户端库

    semaphore-nodejs 在 node.js 中使用 API 的小型客户端库 ##用法 在你的项目中安装 npm &gt; npm install semaphore-sms 用法示例: var semaphore = require ( 'semaphore-sms' ) ; semaphore . set_api_key ...

    semaphore-api:用于 Node.js 的 Hubot 兼容信号量 API 包装器

    npm install semaphore-api 要求 在您的 Hubot 脚本中使用它: module . exports = ( robot ) -&gt; semaphore = require ( ' semaphore-api ' )(robot) 或者单独使用它: semaphore = require ( ' semaphore-...

    Semaphore T-BOX System Overview.PDF

    Semaphore T-BOX System OverviewPDF,Semaphore T-BOX System Overview

    swift-iOS全局并发队列管理工具

    5. **线程间通信**:提供线程安全的机制来传递数据或状态更新,如使用`DispatchSemaphore`或`DispatchGroup`。 6. **日志记录和调试**:记录任务的提交、开始、结束时间,便于调试和性能分析。 在...

    semaphore-demo-php-laravel:使用PHP Laravel的Semaphore演示CICD管道

    使用PHP Laravel的信号量演示CI / CD管道示例应用程序和CI / CD管道显示了如何在Semaphore 2.0上运行PHP Laravel项目。本地项目设置要在本地设置项目,根据,您的本地环境需要满足常见的Laravel开发要求...semaphore-id

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

    Google Cloud Run的信号量CI / CD演示 这是一个示例应用程序和CI / CD管道,显示了如何使用Semaphore 2.0将无服务器微服务构建,测试和部署到Google Cloud... docker build -t semaphore-demo-ruby-kubernetes . docker

    semaphore-docker-systemd:容器化信号量 systemd

    快速开始安装git clone https://github.com/abn/semaphore-docker-systemd.gitcd semaphore-docker-systemdsudo make install用法 # This is as simple assystemctl start semaphore# If you want semaphore to ...

    semaphore完整搭建ansible部署方案

    接下来,`semaphore-2.4.1.tar.gz` 是 Semaphore 的源码包,其中包含了项目的源代码。解压该文件后,你可以查看其结构,理解 Semaphore 的工作原理,并根据需要进行定制或扩展。源码通常包含 README 文件,提供关于...

    信号量同步等待机制 semaphore wait-and-signal

    ### 信号量同步等待机制(Semaphore Wait-and-Signal) #### 一、引言 在多线程编程中,临界资源的访问管理是一项至关重要的任务。为了确保数据的一致性和程序的正确执行,必须采取有效的机制来防止多个线程同时...

    semaphore-demo-android

    适用于Android的信号量演示CI / CD管道 这是一个示例项目和CI / CD管道,显示了如何使用Semaphore 2.0构建,测试和部署Android应用程序。 信号量上的CI / CD ...根据MIT许可证分发。 请参阅文件 。

    semaphore-demo-python-flask:使用Docker Compose和Python Flask的信号量演示CICD管道

    使用基于Docker的Python / Flask / MongoDB应用程序的Semaphore演示CI / CD管道 基于Docker的Python Flask MongoDB应用程序和用于将其与Semaphore 2.0集成的CI / CD管道的示例。 该应用程序演示了使用Flask和...

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

    使用Ruby on Rails的信号量演示CI / CD管道 这是一个示例应用程序和CI / CD管道,显示了如何在Semaphore 2.0上运行Ruby on Rails项目。 本地应用程序设置 ...根据MIT许可证分发。 请参阅文件LICENSE.md。

    Semaphore T-Box RTU.pdf

    在解读了文档《Semaphore T-Box RTU.pdf》的内容后,我们可以梳理出以下与Semaphore T-Box RTU相关的知识点: 首先,Semaphore T-Box RTU是一个先进的远程终端单元(RTU),它首次将复杂的IP/Web技术平台引入到远程...

    Python库 | semaphore-0.1.2-py2.py3-none-manylinux1_x86_64.whl

    资源分类:Python库 所属语言:Python 资源全名:semaphore-0.1.2-py2.py3-none-manylinux1_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Swift-dispatch-semaphore

    Swift中的`DispatchSemaphore`是GCD(Grand Central Dispatch)的一部分,它是Apple的多线程和并发解决方案。在iOS开发中,理解并熟练使用`DispatchSemaphore`对于优化代码性能和处理同步问题至关重要。本文将深入...

    Ansible-semaphore.zip

    在 Ansible-semaphore.zip 文件中,包含的是 Semaphore 的源代码,特别是 "semaphore-master" 这个目录,这通常意味着它是项目的主分支或最新版本。 Semaphore 主要特点包括: 1. **Web GUI**:Semaphore 提供了一...

Global site tag (gtag.js) - Google Analytics