当前位置: 首页 > news >正文

做网站专业术语视频号推广方法

做网站专业术语,视频号推广方法,网站备案大概需要多久,安装vs2015网站开发Java多线程并发工具类-Semaphore对象讲解通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownLatch对象并对这两个对象进行了比较。我们发现这两个对象要么是做加法,要…

Java多线程并发工具类-Semaphore对象讲解

通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownLatch对象并对这两个对象进行了比较。我们发现这两个对象要么是做加法,要么是做减法的。那么有没有既做加法也做减法的呢?当然有了。Semaphore这个工具类就可以实现One out one in的。

本文主要内容:Semaphore是什么?从生活中例子中来理解Semaphore;代码演示;总结。通过总结-理解-代码演示-再总结这四个步骤让大家来深刻的理解。

本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发工具类》教程的第三篇:《Java多线程下信号量》。

一:Semaphore是什么?

Semaphore中文意思:信号量。

来看看JavaAPI中对semaphore对象的解释:

a48eabae891c0446f0b964ea508d9149.png

什么意思呢?

简单理解来说,Semaphore:信号量主要用于两个目的:一个是用于多个共享资源的互斥使用;另一个用于并发线程数量的控制。什么意思呢?我们来从生活中的例子来理解。

二:从生活中例子中来理解Semaphore

案例一:抢车位

自驾游的朋友一般都会遇到这样的烦恼:去景区游玩,停车比较麻烦。因为停车场中的车位数量是一定的。当车位满了以后,其他想要进入停车场停车的车辆只能等待。等到其他车辆出来之后,才可以进入。站在并发角度来分析的话:停车场有多个停车位(多个共享资源),每个车辆只能停在其中一个位置上(互斥使用的),停车场的停车位是固定的(并发线程数量的控制)。这样是不是就好理解了?如果还是不好理解,接着看下面这个案例

案例二:海底捞吃火锅

去海底捞吃火锅的时候,海底捞场地就餐桌数量是固定的,假设有5桌。现在来了8个人,那么其他3个就需要在门口候餐区等待加号。当有其他桌吃完离开之后,进去一个。简图如下:

三:代码演示

我们就来模拟海底捞吃火锅的场景。

9aa39df5a18a3a3d5aaf1182bb96064b.png

3.1:为什么要使用Semaphore?

为什么不能使用其他两个同步工具类呢?

根据CountDownLatch的特性,只能使用一次的特征来说,海底捞这种场景当然不能够使用了。因为开个店不可能只使用一次。

CyclicBarrier,虽然可以使用多次,但是需要reset之后才可以多次使用。意思就是,只有等餐厅里面5个桌的客人都吃完之后,才可以让其他人进来就餐的。这种情况也是不符合业务逻辑的。

而Semaphore可以做到One out One in 很适合海底捞的场景。所以,经过分析,我们可以得到如下代码。

代码演示:

餐桌对象:

0f05a205e4045f907978da8ca4ee78d9.png

执行方法:

771095dd45cf19902bf1b9fac641d884.png

运行结果:

e920275d69603c0cd3367d4875bf28f4.png

从运行结果中,我们可以看到一个进入一个就离开,一个离开餐桌下一位就进入餐厅就餐。达到我们预期结果了。

四:总结

4.1:使用语法

在声明smaphore的时候需要设置线程数量。然后使用acquire获取资源。在finally方法里面调用release方法进行释放资源。如下图:

d84e678ef50f4458a732746a60420b3b.png

4.2:内部主要组成

4.2.1:三个内部类:

3b18d5790a2f7905c38f70c721c9ce6c.png

看到这三个类是不是很熟悉?对就是我们前面介绍的ReentrantLock和ReentrantReadWriteLock这两个对象里面都存在的。继承AQS的Sync类以及公平锁的FairSync类和非公平锁的NonfairSync类。同样,semaphore也支持在构造器中指定是公平还是非公平的:

c2975be6fd87e08225640c3cb4f1df4f.png

4.2.2:主要方法

重要的方法获取和释放方法:

获取资源的:

acquire()/acquire(int permits):获取资源(许可证)/获取指定个数的资源

释放资源:

release()/release(int permits):释放资源/释放指定个数的资源

其他方法:

阻止获取资源:

acquireUninterruptibly()/acquireUninterruptibly(int permits):从这个信号灯获取许可证,阻止一个可用的/阻止指定数量的

获取当前可以用的资源数量: int availablePermits()

还有其他很多方法。凯哥这里就不一一介绍了。大家可以自行查看API

4.3:实现原理

看到Sync这个内部类之后,大家就应该想到了凯哥(kaigejava)在之前介绍过的AQS对象了。没错,Semaphore就是使用AQS和CAS来实现资源的获取和释放的。在这里凯哥就不赘述了。大家可以看看前面凯哥介绍并发容器的同步器相关文章,里面凯哥做了详细的介绍。

d3f28856f1458098bdf706faa319df31.png

​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​欢迎来聊~

http://www.lbrq.cn/news/2678221.html

相关文章:

  • 网站建设调查内容有哪些推广营销网络
  • 国外做问卷调查的网站手机优化助手
  • 一级做爰网站深圳关键词排名优化系统
  • 网站开发框架系统免费个人网页制作
  • 178网站建设网站优化名词解释
  • wordpress更改中文版后还是英文优化关键词的作用
  • 高水平高职院校 建设网站徐州seo招聘
  • 好学校平台网站模板合肥百度关键词推广
  • 做一级域名网站多少钱专注网络营销推广公司
  • 做网站 用什么做数据库最好网上推广
  • 广州网站建设第一公司网站开发流程图
  • 网站制作价格便宜网络推广渠道公司
  • 刷题网站开发重庆seo优化
  • 如何做一个个人网站高级搜索入口
  • 网站功能优化短视频代运营费用明细
  • 抖音app下载武汉seo主管
  • 第一次和两个老头做网站苏州优化排名seo
  • 卢氏县住房和城乡规划建设局网站流量大的推广平台有哪些
  • 做的网站无法显示此页会计培训班要多少钱一般要学多久
  • wordpress建站不知道密码如何进行营销推广
  • wordpress08影视网络优化工程师工资
  • 楼盘网站建设方案ppt营销公司排行
  • 深圳龙华做网站的广州最新新闻
  • 网页和网站区别长春最新发布信息
  • 银川网站建设多少钱seo手机关键词排行推广
  • 如何寻找做网站的客户国际网站平台有哪些
  • 网站3级营销是怎么做的网站托管
  • 建立一个门户网站推广普通话的手抄报
  • 电商网站制作项目描述西安专业做网站公司
  • 天津做网站最权威的公司seo外链优化方法
  • 荣耀手机无法连接win11电脑,错误消息:“无法在此设备上加载驱动程序 (hn_usbccgpfilter.sys)。”解决方案
  • Flutter学习笔记(六)---状态管理、事件、路由、动画
  • R语言机器学习算法实战系列(二十七)LASSO 与 Adaptive LASSO 在特征选择中的比较与应用
  • 第5节 大模型分布式推理通信优化与硬件协同
  • LabVIEW模糊逻辑控制车辆停靠
  • 代码随想录算法训练营第六十天|图论part10