Java并发编程之Semaphore(信号量)详解及实例

概述
通常情况下,可能有多个线程同时访问数目很少的资源,如客户端建立了若干个线程同时访问同一数据库,这势必会造成服务端资源被耗尽的地步,那么怎样能够有效的来控制不可预知的接入量呢?及在同一时刻只能获得指定数目的数据库连接,在JDK1.5 java.util.concurrent 包中引入了Semaphore(信号量),信号量是在简单上锁的基础上实现的,相当于能令线程安全执行,并初始化为可用资源个数的计数器,通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。例如我们可以将一个信号量初始化为可获得的数据库连接个数。一旦某个线程获得了信号量,可获得的数据库连接数减1。线程消耗完资源并释放该资源时,计数器就会加1。当信号量控制的所有资源都已被占用时,若有线程试图访问此信号量,则会进入阻塞状态,直到有可用资源被释放。简单理解就是:如去银行办理业务,只有6个窗口,所以可同时给6个客户办理业务,其他客户只能等待,当有其中一个窗口办理完业务时就会通知下一个客户办理。
主要方法
1、构造方法
Semaphore提供了一个带有boolean参数的构造方法,true代表公平锁,false代表非公平锁,默认实现是非公平锁
2、普通方法
3、 我们来模拟客户在银行办理业务的场景示例
import java.util.Random;
import java.util.concurrent.Semaphore;
public class BankService {
public static void main(String[] args) {
Runnable customer = new Runnable() {
final Semaphore availableWindow = new Semaphore(5, true);
int count = 1;
@Override
public void run() {
int time = (int) (Math.random() * 10 + 3);
int num = count++;
try {
availableWindow.acquire();
System.out.println("正在为第【" + num + "】个客户办理业务,需要时间:" + time + "s!");
Thread.sleep(time * 1000);
if (availableWindow.hasQueuedThreads()) {
System.out.println("第【" + num + "】个客户已办理完业务,有请下一位!");
} else {
System.out.println("第【" + num + "】个客户已办理完业务,没有客户了,休息中!");
}
availableWindow.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
for (int i = 1; i < 10; i++) {
new Thread(customer).start();
}
}
}
4、运行结果
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java并发编程之Semaphore(信号量)
# java
# 并发编程
# 详解Java信号量Semaphore的原理及使用
# 分析Java并发编程之信号量Semaphore
# Java信号量Semaphore原理及代码实例
# 详解Java 信号量Semaphore
# Java 信号量Semaphore的实现
# Java中Semaphore(信号量)的使用方法
# Java并发编程Semaphore计数信号量详解
# JAVA 多线程之信号量(Semaphore)实例详解
# Java Semaphore信号量使用分析讲解
# 信号量
# 就会
# 是在
# 多个
# 基础上
# 已被
# 将其
# 我们可以
# 希望能
# 能有
# 时就
# 所有资源
# 若有
# 都已
# 其中一个
# 谢谢大家
# 提供一个
# 设置为
# 则会
# 服务端
相关文章:
如何在建站主机中优化服务器配置?
SQL查询语句优化的实用方法总结
如何做静态网页,sublimetext3.0制作静态网页?
浅谈Javascript中的Label语句
学校建站服务器如何选型才能满足性能需求?
建站主机选购指南:核心配置与性价比推荐解析
如何用免费手机建站系统零基础打造专业网站?
如何制作网站标识牌,动态网站如何制作(教程)?
如何实现建站之星域名转发设置?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
盐城做公司网站,江苏电子版退休证办理流程?
如何高效利用200m空间完成建站?
北京网站制作网页,网站升级改版需要多久?
nginx修改上传文件大小限制的方法
如何在局域网内绑定自建网站域名?
如何用已有域名快速搭建网站?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
建站之星展会模版如何一键下载生成?
如何用VPS主机快速搭建个人网站?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
Android自定义控件实现温度旋转按钮效果
微信小程序 input输入框控件详解及实例(多种示例)
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
高端云建站费用究竟需要多少预算?
建站VPS能否同时实现高效与安全翻墙?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何正确下载安装西数主机建站助手?
太平洋网站制作公司,网络用语太平洋是什么意思?
如何解决VPS建站LNMP环境配置常见问题?
如何快速配置高效服务器建站软件?
宝塔建站助手安装配置与建站模板使用全流程解析
建站之星安全性能如何?防护体系能否抵御黑客入侵?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何彻底卸载建站之星软件?
,南京靠谱的征婚网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
,有什么在线背英语单词效率比较高的网站?
建站之星云端配置指南:模板选择与SEO优化一键生成
建站DNS解析失败?如何正确配置域名服务器?
代购小票制作网站有哪些,购物小票的简要说明?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
南京网站制作费用,南京远驱官方网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何选择高效稳定的ISP建站解决方案?
如何选择CMS系统实现快速建站与SEO优化?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
制作证书网站有哪些,全国城建培训中心证书查询官网?
Android自定义listview布局实现上拉加载下拉刷新功能
打鱼网站制作软件,波克捕鱼官方号怎么注册?
c# await 一个已经完成的Task会发生什么
*请认真填写需求信息,我们会在24小时内与您取得联系。