JAVA信号量使用示例程序
JAVA里也有强大的信号量工具Semaphore,使用信号量可以很方便的实现线程同步功能,以解决类似于 生产者——消费者 之类的典型问题。
下面是我的测试程序,大部分看注释就可以明白用法:
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.Semaphore; public class TestSemaphore { /**
* 测试主程序
*/
public static void main(String[] args) {
TestSemaphore t = new TestSemaphore();
t.runTest();
} //TestSemaphore
/**信号量*/
private Semaphore mSem = new Semaphore(0);
/**产生的产品队列*/
private Queue<String> mQueue = new LinkedList<String>(); /**
* 进行测试
*/
public void runTest() {
Runnable runProvider = new Runnable() {
@Override
public void run() {
provider();
}
}; Runnable runCustomer = new Runnable() {
@Override
public void run() {
customer();
}
}; new Thread(runCustomer).start();
new Thread(runProvider).start(); while(true) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 生产者线程
*/
public void provider() {
for(int i = 0; i < 10; i++) { //生成一个产品,放到队列里
String p = String.format("product_%d", i);
mQueue.offer(p);
System.out.println(String.format("Send sig >>>>>>>>>>>>> %s", p)); //发出信号量
mSem.release(); try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 消费者线程
*/
public void customer() {
while(true) {
//等待信号量
try {
mSem.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
} //从队列里取出一个产品
String s = mQueue.poll();
System.out.println(String.format("Get sig : %s", s)); try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} }
JAVA信号量使用示例程序的更多相关文章
- Java代理模式示例程序
Java代理模式示例程序 当然不是我想出来的,是我看的一个网上教程里的. 模拟的是一个对电脑公司的代理 真实类的接口: public interface SaleComputer { public S ...
- epub、ocf等常用电子书格式浅析----附JAVA示例程序
一. 电子书介绍 转载请注明http://www.cnblogs.com/xckk/p/6020324.html Epub(Electronic Publication)是一个完全开放和免费的电子书标 ...
- BitCoinJ之Hello World示例程序
简介 比特币(BitCoin)是一种基于区块链(BlockChain)技术的数字化货币. 本文介绍了使用基于Java语言的BitCoinJ API实现一个简单的收取和支付比特币的示例程序. 开发环境 ...
- RocketMQ消费者示例程序
转载请注明出处:http://www.cnblogs.com/xiaodf/ 本博客实现了一个简单的RocketMQ消费者的示例,MQ里存储的是经过Avro序列化的消息数据,程序读取数据并反序列化后, ...
- RocketMQ生产者示例程序
转载请注明出处:http://www.cnblogs.com/xiaodf/ 本示例展示了一个RocketMQ producer的简单实现,通过解析文本文件获取输入数据,将数据经过Avro序列化后发送 ...
- [译]Java Thread Sleep示例
Java Thread Sleep示例 java.lang.Thread sleep(long millis)方法被用来暂停当前线程的执行,暂停时间由方法参数指定,单位为毫秒.注意参数不能为负数,否则 ...
- [译]Java Thread join示例与详解
Java Thread join示例与详解 Java Thread join方法用来暂停当前线程直到join操作上的线程结束.java中有三个重载的join方法: public final void ...
- Ruby简介,附带示例程序
Ruby语言是日本人松本行弘于1993年器开始着手研发,经历2年时间,发布了Ruby语言的第一个版本:0.95版. Ruby是一种非常简介的解释性语言,一种纯粹的面向对象编程语言,甚至比Jav ...
- delphi7编写客户端调用java服务器端webservice示例
1. 首先取得java-webservice服务器端地址.我的是:http://localhost:8080/mywebservice/services/mywebservice?wsdl 2. 然后 ...
随机推荐
- Web应用程序安全必须重视八大问题
摘自:http://netsecurity.51cto.com/art/201402/428709.htm 对于任何一个项目,开始阶段对于交付安全的应用来说非常关键.适当的安全要求会导致正确的安全设计 ...
- MBR与分区表备份与恢复
常用工具列表 dd 数据复制,转换实用工具 tar GNU磁盘存档实用工具 cpio 数据存档实用工 ...
- VMware10.0.4下 CentOS 6.5 cmake安装 MySQL 5.5.32
一.准备工作 1.1.创建 zhuzz/tools目录 [root@localhost ~]# mkdir -p /home/zhuzz/tools [root@localhost ~]# cd /h ...
- JAVA 修改 JSESSIONID
@Action("sidTest") public void sidTest() { HttpSession session = request.getSession(); Str ...
- php文本操作方法集合
fgets和fputs.fread和fwrite.fscanf和fprintf 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函 ...
- CentOS 6.4 安装SecurectCRT并破解
经过验证此方法使用于Centos 系列. 相关说明: 上篇发了个Linux(Ubuntu) 下 SecureCRT 7 30天循环破解在启动的时候会多输入一次确认窗口, 后来maz-1网友留言说可以用 ...
- python3 中自带urllib库可下载图片到本地
刚从python3下载图片的语句python2的不太一样,具体python3语句如下: form urllib import request jpg_link = '......' #图片链接 re ...
- Lucas定理的理解与应用
Lucas定理:用于计算组合数模除素数后的值,其实就是把(n,m)分别表示为p进制,累乘各位的可能取的个数,得到最终的结果: 推论:(n & m) == m则C(n,m)为奇数:即C(n,m) ...
- C99标准中的部分新特性
我有点怀疑我会不会C语言了. 1.变长数组(VLA) ; scanf("%d", &n); int arr[n]; 2.数组初始化 ] = {[] = , [] = , [ ...
- <三> SQL杂七杂八
批量插入测试数据 use Testdeclare @count INTset @count = 0while(@count < 10)begin waitfor delay '000:00:10 ...