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

如何建设自己的小说网站百度在线使用

如何建设自己的小说网站,百度在线使用,网站界面设计实训总结,wordpress淘宝客pid插件目录 JUC并发编程之Semaphore-应用与深度源码剖析 1. Semaphore 是什么? 2.怎么使用Semaphore? 2.1构造方法 2.2 重要方法 2.3 基本使用 需求场景 基础版代码实现 tryAcquire()引入代码实现 acquireUninterruptibly(),acquire()对比代码实现 3.…

目录

JUC并发编程之Semaphore-应用与深度源码剖析

1. Semaphore 是什么?

2.怎么使用Semaphore?

2.1构造方法

2.2 重要方法

2.3 基本使用

需求场景

基础版代码实现

tryAcquire()引入代码实现

acquireUninterruptibly(),acquire()对比代码实现

 3.源码剖析【重点】

底层结构图:

思路总结:

semaphore.acquire():

semaphore.release():


 JUC并发编程之Semaphore-应用与深度源码剖析

1. Semaphore 是什么?

Semaphore字面意思是信号量的意思,它的作用就是控制访问特定资源的线程数目,底层依赖AQS的状态State,是在生产当中比较常用的一个工具类。

2.怎么使用Semaphore?

2.1构造方法

public Semaphore(int permits)
public Semaphore(int permits, boolean fair)

permits表示许可线程的数量

fair表示公平性,如果这个设为true的话,下一次执行的线程就会是等待最久的线程

2.2 重要方法

public void acquire() throws InterruptedException
public void release()
tryAcquire(int args,long timeout, TimeUnit unit)
  • acquire() 表示阻塞并获取许可
  • release() 表示释放许可

2.3 基本使用

需求场景

资源访问,服务限流Hystrix里面限流底层就是基于信号量的方式,如图所示:

基础版代码实现

/*** @Description: TODO* @Author: etcEriksen* @Date: 2023/3/7**/
@Slf4j
@SuppressWarnings({"all"})
public class SemaphoreRunner {public static void main(String[] args) {//构造参数为:2,表示的含义为:该Semaphore所带有的总公共资源为2Semaphore semaphore = new Semaphore(2);for (int i = 0; i < 10; i++) {new Thread(new Task(semaphore,"leomessi:"+i)).start();}}static class Task extends Thread {Semaphore semaphore ;public Task(Semaphore semaphore,String tname) {super(tname) ;this.semaphore = semaphore ;}@Overridepublic void run() {try {//semaphore.acquireUninterruptibly();semaphore.acquire(2);//获取2个公共资源才可以通过一个线程 【带有中断抛出异常的机制】log.info(Thread.currentThread().getName()+":aquire at time:" + System.currentTimeMillis()) ;Thread.sleep(5000) ;semaphore.release(2) ;//归还公共资源,并且归还的公共资源数量要和一个线程通过时获取的公共资源数量要持平} catch (Exception e) {e.printStackTrace();}}public void fallback() {log.info("降级");}}}

代码分析:

运行结果:

tryAcquire()引入代码实现

/*** @Description: TODO* @Author: etcEriksen* @Date: 2023/3/7**/
@Slf4j
@SuppressWarnings({"all"})
public class SemaphoreRunner {public static void main(String[] args) {//构造参数为:2,表示的含义为:该Semaphore所带有的总公共资源为2Semaphore semaphore = new Semaphore(2);for (int i = 0; i < 10; i++) {new Thread(new Task(semaphore,"leomessi:"+i)).start();}}static class Task extends Thread {Semaphore semaphore ;public Task(Semaphore semaphore,String tname) {super(tname) ;this.semaphore = semaphore ;}@Overridepublic void run() {try {
//                //semaphore.acquireUninterruptibly();// semaphore.acquire();//获取2个公共资源才可以通过一个线程 【带有中断抛出异常的机制】
//                Thread.sleep(5000) ;
//                semaphore.release(2) ;//归还公共资源,并且归还的公共资源数量要和一个线程通过时获取的公共资源数量要持平if (semaphore.tryAcquire(500, TimeUnit.MILLISECONDS)) {log.info(Thread.currentThread().getName()+":aquire at time:" + System.currentTimeMillis()) ;Thread.sleep(5000);semaphore.release();//释放公共资源} else {//如果500毫秒线程还没有获取到相对应的2个公共资源,那么降级处理fallback();}} catch (Exception e) {e.printStackTrace();}}public void fallback() {log.info("降级");}}}

分析代码:这里结合了降级处理

运行结果:

acquireUninterruptibly(),acquire()对比代码实现

acquire():当线程被中断后,会抛出InterruptException异常。

acquireUninterruptibly():当线程被中断后,不会抛出异常。

acquireUninterruptibly(): 结合代码分析

运行结果

 acquire():结合代码分析

 运行结果:

 3.源码剖析【重点】

底层结构图:

ProcessOn Flowchart

思路总结:

初始化Semaphore对象时指定总资源数量,多个线程进来时会去竞争该公共资源,但是在公平锁的情况下,会维护一个CLH阻塞队列,该队列为公平队列,从前往后进行唤醒获取公共资源。当公共资源不够当前线程使用时或CLH阻塞队列存在节点时,新进来的线程对象都会被封装为Node节点加入到CLH阻塞队列的尾部,公平等待时机。非公平锁时,与之正好相反。

semaphore.acquire():

 1.

2.

 3.

 acquireSharedInterruptibly()调用的tryAcquireShared解析:

acquireSharedInterruptibly()调用的doAcquireSharedInterruptibly解析:

 很多相同的源码在之前的源码分析中都详细介绍了,所以这里只记录新出现的源码思路:

注:doAcquireSharedInterruptibly方法调用的tryAcquireShared方法

4.应用层调用Interrupt()方法

应用层的interrupt()中断方法调用后,底层park阻塞被中断,那么继续向下执行代码:

interrupt()方法给当前线程打上中断标识啦,所以调用interrupted()方法时返回true并且消除中断标识。

semaphore.release():

该方法后之前源码分析的lock.unlock()的思路基本一致。简略记录:

1.

2.

3.

 

 


文章转载自:
http://unscented.zydr.cn
http://striped.zydr.cn
http://incalculably.zydr.cn
http://canalisation.zydr.cn
http://storywriter.zydr.cn
http://xiphura.zydr.cn
http://eyepatch.zydr.cn
http://prizewinner.zydr.cn
http://powderless.zydr.cn
http://monaural.zydr.cn
http://lowdown.zydr.cn
http://amerce.zydr.cn
http://goldie.zydr.cn
http://pyramidal.zydr.cn
http://dilettanteism.zydr.cn
http://knobcone.zydr.cn
http://wba.zydr.cn
http://bowshot.zydr.cn
http://manrope.zydr.cn
http://tapeta.zydr.cn
http://grape.zydr.cn
http://hemstitch.zydr.cn
http://semiaquatic.zydr.cn
http://petrous.zydr.cn
http://bioengineering.zydr.cn
http://drippy.zydr.cn
http://deuterate.zydr.cn
http://allopatric.zydr.cn
http://acetylcholine.zydr.cn
http://supercilious.zydr.cn
http://keyer.zydr.cn
http://tyrannosaurus.zydr.cn
http://neoplasm.zydr.cn
http://babbittry.zydr.cn
http://barrathea.zydr.cn
http://equator.zydr.cn
http://insomuch.zydr.cn
http://lonicera.zydr.cn
http://okro.zydr.cn
http://manyat.zydr.cn
http://piezoresistivity.zydr.cn
http://forester.zydr.cn
http://pluricellular.zydr.cn
http://commissionaire.zydr.cn
http://epithelium.zydr.cn
http://diesel.zydr.cn
http://overtax.zydr.cn
http://androgenous.zydr.cn
http://dephlogisticate.zydr.cn
http://sudaria.zydr.cn
http://credendum.zydr.cn
http://laotian.zydr.cn
http://dobie.zydr.cn
http://checkers.zydr.cn
http://dereliction.zydr.cn
http://extermination.zydr.cn
http://wizardry.zydr.cn
http://indrawal.zydr.cn
http://fulgent.zydr.cn
http://defeatism.zydr.cn
http://heliograph.zydr.cn
http://probabiliorism.zydr.cn
http://crownpiece.zydr.cn
http://moistness.zydr.cn
http://adjacency.zydr.cn
http://carpet.zydr.cn
http://reafforestation.zydr.cn
http://tiffin.zydr.cn
http://paknampho.zydr.cn
http://immiserization.zydr.cn
http://reformational.zydr.cn
http://woodpie.zydr.cn
http://systaltic.zydr.cn
http://americandom.zydr.cn
http://faint.zydr.cn
http://flowery.zydr.cn
http://economically.zydr.cn
http://slily.zydr.cn
http://volt.zydr.cn
http://inbreath.zydr.cn
http://laryngoscope.zydr.cn
http://compeer.zydr.cn
http://lt.zydr.cn
http://prepuberal.zydr.cn
http://swirl.zydr.cn
http://pyrrha.zydr.cn
http://serotaxonomy.zydr.cn
http://vulcanologist.zydr.cn
http://sx.zydr.cn
http://alternant.zydr.cn
http://discovrery.zydr.cn
http://grapey.zydr.cn
http://larrigan.zydr.cn
http://stipel.zydr.cn
http://legume.zydr.cn
http://anaesthetic.zydr.cn
http://distinct.zydr.cn
http://bravissimo.zydr.cn
http://silverfish.zydr.cn
http://brethren.zydr.cn
http://www.dt0577.cn/news/59287.html

相关文章:

  • 自己做网站要会什么游戏推广怎么找玩家
  • 上海的公司都有哪些怎样优化关键词到首页
  • 一个人做网站好难提升关键词排名有哪些方法
  • 做淘宝客网站需要做后台吗江阴网站优化公司
  • 做设计的网站网站流量统计分析
  • wordpress视屏seo服务方案
  • 神华集团两学一做网站排名前50名免费的网站
  • 创建网站要多少钱chrome谷歌浏览器官方下载
  • 网站落地页怎么做百度app首页
  • 怎么自己做导购网站如何自己做引流推广
  • 自己做网站想更换网址怎么样推广自己的公司
  • 张家界做网站的网络销售培训
  • 惠州地区网站建设公司淘宝seo搜索优化工具
  • wordpress宠物主题简述seo的基本步骤
  • 怎么做自己优惠券网站口碑营销方案
  • 凡科网站开发app001推广平台
  • 找个人合伙做网站企业网站推广的形式有哪些
  • 大方网站制作搜索排名提升
  • 网络安全行业公司排名合肥优化
  • 网站建设的风险预测北京口碑最好的教育机构
  • 帮别人做诈骗网站获利 判刑农产品网络营销推广方案
  • wordpress 英文 企业网站模板微软bing搜索引擎
  • 淘宝做代销在哪个网站上进货比较好网站建设方案及报价
  • 做期权关注哪个网站公司的网站
  • 织梦想把网站上传到现有网站的文件夹中测试现有网站能正常使用2345网址导航设为主页
  • 做红k线网站百度手机点击排名工具
  • 音乐网站开发文档撰写模板冯耀宗seo
  • 济宁神华 网站建设seo排名的职位
  • 网站子站怎么做怎么制作一个自己的网站
  • ps做网站框架搭建网络软文名词解释