`

semaphore简单实例

阅读更多

semaphore是java里边的信号灯,感觉很像blockqueue,嗯

 

package com.mutiple;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class TestSemaphore {
	
	public static void main(String[] args) {
		ExecutorService exec = Executors.newCachedThreadPool();
		
		final Semaphore semp = new Semaphore(5);
		
		for (int i = 0; i < 20; i++) {
			final int no = i;
			Runnable run = new Runnable() {
				
				@Override
				public void run() {
					try {
						semp.acquire();
						System.out.println("Accessing: "+no);
						long time = (long) (Math.random()*10000);
						System.out.println(time);
						Thread.sleep(time);
						semp.release();
						System.out.println("---------------"+semp.availablePermits());
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			};
			exec.execute(run);
		}
		
		exec.shutdown();
	}

}

 

 

 

分享到:
评论

相关推荐

    C#语言Semaphore类用法实例(多线程多端口使用端口控制)

    C#语言Semaphore类用法实例,多线程 用于有多个同类型共享资源(比如端口)时,如何协调端口分配给线程访问资源的问题,是一个简单模拟实例(源代码)。

    Python多线程同步Lock、RLock、Semaphore、Event实例

    一、多线程同步 ...Event : 是最简单的线程间通信的方式,一个线程可以发送信号,其他的线程接收到信号后执行操作。  二、实例 1)Lock & RLock Lock对象的状态可以为locked和unlocked 使用acquire()设置

    vxworks多任务(task和semaphore信号量及事件)例程.zip

    资源包含了vxworks多任务(task和semaphore信号量及事件)的相关编程例子,通过创建多任务的简单例子,帮助大家了解taskSpawn函数、信号量semaphore、以及事件event的使用方法。

    bt-semaphore:受SBCL信号量启发的波尔多线程的简单信号量类

    make-semaphore创建一个信号量实例 wait-on-semaphore阻塞,直到信号量可以递减(即其计数&gt; 0)或超时到期 signal-semaphore增加信号量并唤醒n个等待线程 try-semaphore递减信号量而不会阻塞 semaphore-count返回...

    Windows环境下32位汇编语言程序设计 第2版(罗文斌) 完整光盘

    最简单的动态链接库例子 - 在VC++中使用汇编编写的DLL Chapter11\KeyHook ;Windows 钩子的例子 - 监听键盘动作 Chapter11\RecHook ;Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - ...

    Windows环境下32位汇编语言程序设计(最新琢石成器版)附属光盘

    最简单的动态链接库例子 - 在VC++中使用汇编编写的DLL Chapter11\KeyHook ;Windows 钩子的例子 - 监听键盘动作 Chapter11\RecHook ;Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 ...

    javaSE代码实例

    3.7.4 令人困扰的例子 37 3.8 赋值运算 37 3.8.1 普通赋值运算 37 3.8.2 运算赋值运算 38 3.9 括号及运算符间的优先级关系 38 3.10 常用数学工具包——java.lang.Math类 39 3.10.1 数学常量 39 3.10.2...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    Visual C++.NET编程技术体验__实例源码

    多线程编程 9.6.1 示例——使用全局变量通信 9.6.2 示例——使用Windows消息通信 9.7.5 示例——使用CriticalSection对象 9.7.7 示例——使用Mutex对象 9.7.9 示例——使用Semaphore对象 第10章 ...

    Windows环境下32位汇编语言程序设计_随书光盘

    最简单的动态链接库例子 - 在VC++中使用汇编编写的DLL Chapter11\KeyHook ;Windows 钩子的例子 - 监听键盘动作 Chapter11\RecHook ;Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - ...

    个人总结的深入java多线程开发

    1)演示简单的消费者和生产者的例子: 17 2)管道的读写流处理方式 19 3)重要的演示死锁的问题—哲学家就餐问题 20 4)终止多线程程序的两种方式(轮询访问变量和interrupt方法) 23 四Concurrent包详解 25 1)Executor...

    Python multiprocessing.Manager介绍和实例(进程间共享数据)

    使用multiprocessing.Manager可以简单地使用这些高级接口。 Manager()返回的manager对象控制了一个server进程,此进程包含的python对象可以被其他的进程通过proxies来访问。从而达到多进程间数据通信且安全。 ...

    Karma:JavaScript 测试运行器-开源

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

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

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

    Linux C 一站式学习

    2.2. 实例剖析 2.3. 数据块寻址 2.4. 文件和目录操作的系统函数 3. VFS 3.1. 内核数据结构 3.2. dup和dup2函数 30. 进程 1. 引言 2. 环境变量 3. 进程控制 3.1. fork函数 3.2. exec函数 3.3. wait和waitpid函数 4. ...

    Delphi深度编程技术

    2.4.3 信号量(Semaphore) 2.5 进程的优先级别 2.5.1 进程的优先级类 2.5.2 相对优先级 2.6 后台多线程数据查询实例 第3章 自定义组件的编写 3.1 组件的基本概念 3.1.1 属性 3.1.2 方法 3.1.3 事件 ...

    《Delphi 深度编程及其项目应用开发》PDF书及代码

    2.3 TThread对象 2.3.1 线程的创建 2.3.2 线程的挂起和恢复 2.3.3 线程的终止 2.3.4 与VCL同步 2.4 线程同步 2.4.1 临界区(CriticalSection) 2.4.2 互斥(Mutex) 2.4.3 信号量(Semaphore) 2.5 进程的优先级别 2.5.1 ...

    宋劲彬的嵌入式C语言一站式编程

    3.3. Semaphore 3.4. 其它线程间同步机制 4. 编程练习 36. TCP/IP协议基础 1. TCP/IP协议栈与数据包封装 2. 以太网(RFC 894)帧格式 3. ARP数据报格式 4. IP数据报格式 5. IP地址与路由 6. UDP段格式 7. TCP协议 7.1....

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    2.7 简单应用程序部署(私有部署的程序集) 2.8 简单管理控制(配置) 第3章 共享程序集和强命名程序集 3.1 两种程序集,两种部署 3.2 为程序集分配强名称 3.3 全局程序集缓存 3.4 在生成的程序集中引用一个强...

Global site tag (gtag.js) - Google Analytics