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

显示网站正在建设中深圳福田区怎么样

显示网站正在建设中,深圳福田区怎么样,动画制作软件有哪些?,网站开发课程设计总结这里写目录标题 1、ReentrantLock2、Semaphore3、CountDownLatch4、CyclicBarrier 1、ReentrantLock ReentrantLock 是属于独占模式, 即同一时刻只允许一个线程获取锁。 2、Semaphore Semaphore 属于共享模式,synchronized 和 ReentrantLock 都是一次只…

这里写目录标题

  • 1、ReentrantLock
  • 2、Semaphore
  • 3、CountDownLatch
  • 4、CyclicBarrier

1、ReentrantLock

ReentrantLock 是属于独占模式, 即同一时刻只允许一个线程获取锁。

2、Semaphore

Semaphore 属于共享模式,synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个资源,而Semaphore(信号量)可以用来控制同时访问特定资源的线程数量。

在这里插入图片描述

Semaphore 通常用于那些资源有明确访问数量限制的场景比如限流(仅限于单机模式,实际项目中推荐使用 Redis +Lua 来做限流

Semaphore 的原理:
在这里插入图片描述

3、CountDownLatch

CountDownLatch 允许 count 个线程阻塞在一个地方,直至所有线程的任务都执行完毕。CountDownLatch 是一次性的,计数器的值只能在构造方法中初始化一次,之后没有任何机制再次对其设置值,当 CountDownLatch 使用完毕后,它不能再次被使用。

原理:
CountDownLatch 是共享锁的一种实现,它默认构造 AQS 的 state 值为 count。当线程使用 countDown() 方法时,其实使用了tryReleaseShared方法以 CAS 的操作来减少 state,直至 state 为 0 。当调用 await() 方法的时候,如果 state 不为 0,那就证明任务还没有执行完毕,await() 方法就会一直阻塞,也就是说 await() 方法之后的语句不会被执行。直到count 个线程调用了countDown()使 state 值被减为 0,或者调用await()的线程被中断,该线程才会从阻塞中被唤醒,await() 方法之后的语句得到执行

应用场景:
读取处理 6 个文件,这 6 个任务都是没有执行顺序依赖的任务,但是我们需要返回给用户的时候将这几个文件的处理的结果进行统计整理。

为此我们定义了一个线程池和 count 为 6 的CountDownLatch对象 。使用线程池处理读取任务,每一个线程处理完之后就将 count-1,调用CountDownLatch对象的 await()方法,直到所有文件读取完之后,才会接着执行后面的逻辑。

public class CountDownLatchExample1 {// 处理文件的数量private static final int threadCount = 6;public static void main(String[] args) throws InterruptedException {// 创建一个具有固定线程数量的线程池对象(推荐使用构造方法创建)ExecutorService threadPool = Executors.newFixedThreadPool(10);final CountDownLatch countDownLatch = new CountDownLatch(threadCount);for (int i = 0; i < threadCount; i++) {final int threadnum = i;threadPool.execute(() -> {try {//处理文件的业务操作//......} catch (InterruptedException e) {e.printStackTrace();} finally {//表示一个文件已经被完成countDownLatch.countDown();}});}countDownLatch.await();threadPool.shutdown();System.out.println("finish");}
}

在这里插入图片描述

4、CyclicBarrier

CyclicBarrier 和 CountDownLatch 非常类似,它也可以实现线程间的技术等待,但是它的功能比 CountDownLatch 更加复杂和强大。主要应用场景和 CountDownLatch 类似。

CountDownLatch 的实现是基于 AQS 的,而 CycliBarrier 是基于 ReentrantLock(ReentrantLock 也属于 AQS 同步器)和 Condition 的。

原理:
让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。

在这里插入图片描述

http://www.yayakq.cn/news/291828/

相关文章:

  • 团队协同网站开发营销网站建设规划方案
  • 品牌网站建设费wordpress无法发送
  • photoshop做图网站个人主页页面设计制作
  • 天津网络关键词排名seo sem培训
  • 网站开发公司基础产品网站介绍模版
  • 如何更快的让百度收录网站建设部评职称查询网站
  • 贵州省建设银行招聘网站html5做网站的好处
  • 网站seo优化关键词快速排名上首页向客户介绍网站建设
  • 音乐网站用什么语言做网站展示型广告案例解析
  • 凡科建站快车代理登录沈阳妇科医院排名最好的医院
  • 广西住建局官方网站dw网页制作多少钱
  • 济南专业做网站做任务给佣金的网站
  • php网站开发示例代码甘肃网络推广公司
  • 百度识图在线使用外贸seo网站推广
  • 手机和pc合一的网站门户网站html下载
  • 机场网站建设密山网站
  • 制作查询网站开微信小程序要钱吗
  • 品牌网站设计标准电商品牌排行榜
  • 江南大学做网站东莞网站建设lhznkj
  • 做花语的网站创建地址怎么弄
  • 怎么看一个网站什么程序做的成都网站内容策划
  • json取数据做网站新型建房有哪几种
  • 全屋定制哪个网站好wordpress 页面跳转
  • 网站维护与排名网页设计与制作案例教程第二版
  • asp.net官方网站wordpress登录非常慢
  • 如何做图让网站的图更清晰如何做网站平台关注
  • 教育培训类网站设计新浪体育最新消息
  • 寿光市住房和城乡建设局网站网上怎么查自己的房产信息
  • 公司的网站建设费用算什么费用上海网页制作哪家好
  • 华蓥网站建设科技作品