在如下的场景,我们可能需要加入类似许可证的实现:
有一个资源队列,不管在什么情况下,都只允许指定数目的资源被使用,资源被使用,并归还之后,新的任务才能使用这些资源。
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的开发源码,这对于理解其内部工作原理、自定义功能或贡献代码到开源项目来说是极其宝贵的资源。 Semaphore的核心特性在于它的可视化部署服务,它...
在 "semaphore-2.8.22.tar.gz" 文件中,我们获得了 Semaphore 的源代码,版本号为 2.8.22。 Semaphore 项目与 Ansible 的集成允许用户通过图形界面来执行常见的 Ansible 功能,如创建和管理 Playbooks、组织主机和...
Semaphore-0.4.46是一个特定版本的Python实现,它提供了对信号量操作的基本接口。在这个版本中,我们可以期待一些关键功能和改进,如: 1. **初始化**:Semaphore对象在创建时可以设置一个初始值,这个值表示可以...
Kubernetes的Semaphore CI / CD演示 这是一个示例应用程序和CI / CD管道,展示了如何使用Semaphore 2.0将微服务构建,测试和部署...docker run -p 80:4567 semaphore-demo-ruby-kubernetes curl localhost > hello worl
semaphore-nodejs 在 node.js 中使用 API 的小型客户端库 ##用法 在你的项目中安装 npm > npm install semaphore-sms 用法示例: var semaphore = require ( 'semaphore-sms' ) ; semaphore . set_api_key ...
npm install semaphore-api 要求 在您的 Hubot 脚本中使用它: module . exports = ( robot ) -> semaphore = require ( ' semaphore-api ' )(robot) 或者单独使用它: semaphore = require ( ' semaphore-...
Semaphore T-BOX System OverviewPDF,Semaphore T-BOX System Overview
5. **线程间通信**:提供线程安全的机制来传递数据或状态更新,如使用`DispatchSemaphore`或`DispatchGroup`。 6. **日志记录和调试**:记录任务的提交、开始、结束时间,便于调试和性能分析。 在...
使用PHP Laravel的信号量演示CI / CD管道示例应用程序和CI / CD管道显示了如何在Semaphore 2.0上运行PHP Laravel项目。本地项目设置要在本地设置项目,根据,您的本地环境需要满足常见的Laravel开发要求...semaphore-id
Google Cloud Run的信号量CI / CD演示 这是一个示例应用程序和CI / CD管道,显示了如何使用Semaphore 2.0将无服务器微服务构建,测试和部署到Google Cloud... docker build -t semaphore-demo-ruby-kubernetes . docker
快速开始安装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-2.4.1.tar.gz` 是 Semaphore 的源码包,其中包含了项目的源代码。解压该文件后,你可以查看其结构,理解 Semaphore 的工作原理,并根据需要进行定制或扩展。源码通常包含 README 文件,提供关于...
### 信号量同步等待机制(Semaphore Wait-and-Signal) #### 一、引言 在多线程编程中,临界资源的访问管理是一项至关重要的任务。为了确保数据的一致性和程序的正确执行,必须采取有效的机制来防止多个线程同时...
适用于Android的信号量演示CI / CD管道 这是一个示例项目和CI / CD管道,显示了如何使用Semaphore 2.0构建,测试和部署Android应用程序。 信号量上的CI / CD ...根据MIT许可证分发。 请参阅文件 。
使用基于Docker的Python / Flask / MongoDB应用程序的Semaphore演示CI / CD管道 基于Docker的Python Flask MongoDB应用程序和用于将其与Semaphore 2.0集成的CI / CD管道的示例。 该应用程序演示了使用Flask和...
使用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相关的知识点: 首先,Semaphore T-Box RTU是一个先进的远程终端单元(RTU),它首次将复杂的IP/Web技术平台引入到远程...
资源分类:Python库 所属语言:Python 资源全名:semaphore-0.1.2-py2.py3-none-manylinux1_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Swift中的`DispatchSemaphore`是GCD(Grand Central Dispatch)的一部分,它是Apple的多线程和并发解决方案。在iOS开发中,理解并熟练使用`DispatchSemaphore`对于优化代码性能和处理同步问题至关重要。本文将深入...
在 Ansible-semaphore.zip 文件中,包含的是 Semaphore 的源代码,特别是 "semaphore-master" 这个目录,这通常意味着它是项目的主分支或最新版本。 Semaphore 主要特点包括: 1. **Web GUI**:Semaphore 提供了一...