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

网站站群建设进度钦州市建设工程质量监督站网站

网站站群建设进度,钦州市建设工程质量监督站网站,做二手家电网站怎样,网页设计及网站建设的相关概念文章目录 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结一、CountDownLatch二、CyclicBarrier三、Semaphore总结 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结 在Java多线程编程中#xff0c;有三种常见的同步工具类#xff1a;CountDownL… 文章目录 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结一、CountDownLatch二、CyclicBarrier三、Semaphore总结 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结 在Java多线程编程中有三种常见的同步工具类CountDownLatch、CyclicBarrier、Semaphore。这些工具类使得我们可以在多个线程之间进行协调实现更高效的并发处理。本文将对它们的原理和实例进行分析总结。 一、CountDownLatch CountDownLatch是一个计数器类用来控制线程等待其他线程执行完毕再继续执行。这个类通常用于主线程等待多个子线程完成任务后再进行下一步操作。CountDownLatch的实现基于AQSAbstractQueuedSynchronizer使用了共享锁的方式。 CountDownLatch的使用思路比较简单首先创建一个CountDownLatch对象并把需要等待的线程数量传入CountDownLatch的构造方法。然后在每个子线程完成任务时通过countDown()方法来减少计数器的值。当计数器变为0时await()方法会返回主线程就可以继续执行下一步操作。 下面是一个简单的示例代码 public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {int threadCount 5;CountDownLatch countDownLatch new CountDownLatch(threadCount);for (int i 0; i threadCount ; i) {new Thread(() - {try {Thread.sleep(1000L);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() 执行完毕);countDownLatch.countDown();}).start();}countDownLatch.await();System.out.println(所有线程执行完毕);} }以上代码中我们创建了一个CountDownLatch对象并传入需要等待的线程数量。然后通过for循环创建了5个子线程每个子线程都会睡眠1秒钟模拟执行任务。当每个子线程完成任务后调用countDown()方法来减少计数器的值。最后在主线程中调用await()方法来等待所有子线程完成任务。 二、CyclicBarrier CyclicBarrier也是一个很有用的同步工具类它可以让一组线程到达某个屏障也可以理解为关卡时被阻塞直到所有线程都到达该屏障时才能继续执行。CyclicBarrier和CountDownLatch的区别在于CountDownLatch只能使用一次而CyclicBarrier可以重复使用。 CyclicBarrier的实现也是基于AQSAbstractQueuedSynchronizer但是使用了独占锁的方式。CyclicBarrier的使用思路也比较简单首先创建一个CyclicBarrier对象并把需要等待的线程数量和到达该屏障时需要执行的动作可选传入CyclicBarrier的构造方法。当所有线程到达该屏障时CyclicBarrier会自动调用之前设置的动作如果有然后所有线程就可以继续执行接下来的操作。 下面是一个简单的示例代码 public class CyclicBarrierDemo {public static void main(String[] args) throws InterruptedException, BrokenBarrierException {int threadCount 3;CyclicBarrier cyclicBarrier new CyclicBarrier(threadCount, () - System.out.println(所有线程到达屏障));for (int i 0; i threadCount ; i) {new Thread(() - {try {Thread.sleep(1000L);System.out.println(Thread.currentThread().getName() 到达屏障);cyclicBarrier.await();System.out.println(Thread.currentThread().getName() 继续执行);} catch (InterruptedException | BrokenBarrierException e) {e.printStackTrace();}}).start();}} }以上代码中我们创建了一个CyclicBarrier对象并传入需要等待的线程数量和到达屏障时需要执行的动作。然后通过for循环创建了3个子线程每个子线程都会睡眠1秒钟并在到达屏障时调用await()方法。当所有子线程都到达屏障时CyclicBarrier会自动执行之前设置的动作输出“所有线程到达屏障”然后所有线程就可以继续执行接下来的操作。 三、Semaphore Semaphore是另一种常见的同步工具类它可以限制同时访问某个共享资源的线程数量。Semaphore的实现也是基于AQSAbstractQueuedSynchronizer使用了共享锁的方式。 Semaphore的使用思路比较简单首先创建一个Semaphore对象并把该共享资源的数量传入Semaphore的构造方法。然后在每个需要访问该共享资源的线程中调用acquire()方法来获取访问权限在使用完共享资源后再调用release()方法来释放访问权限。 下面是一个简单的示例代码 public class SemaphoreDemo {public static void main(String[] args) {int threadCount 10;Semaphore semaphore new Semaphore(2);for (int i 0; i threadCount ; i) {new Thread(() - {try {semaphore.acquire();System.out.println(Thread.currentThread().getName() 获取访问权限);Thread.sleep(1000L);} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release();System.out.println(Thread.currentThread().getName() 释放访问权限);}}).start();}} }以上代码中我们创建了一个Semaphore对象并传入该共享资源的数量。然后通过for循环创建了10个子线程每个子线程需要获取访问权限才能执行如果访问权限已满则需要等待其他线程释放访问权限。当使用完共享资源后子线程需要调用release()方法来释放访问权限。 总结 本文分析了CountDownLatch、CyclicBarrier、Semaphore三种常见的同步工具类的原理和实例。这些工具类可以帮助我们在多个线程之间进行协调实现更高效的并发编程。在使用这些工具类时需要注意不同工具类的区别和使用场景以及合理地控制线程的数量和访问权限避免出现死锁等问题。
http://www.dnsts.com.cn/news/7580.html

相关文章:

  • 军博做网站公司网站建设费能计入无形资产
  • 网站建设项目外包合同范本广州番禺区怎么样
  • 怎么寻找做有意做网站的客户wordpress做付费阅读
  • 西安专业做网站的开发网站实训的心得体会
  • 市场体系建设司在官方网站wordpress数据库删除
  • 橡胶塑料制品公司网站建设wordpress自定义表格
  • linux做网站优势wordpress网站生成app应用
  • 素材搜集网站中文网址的作用
  • html5 可以做网站吗wordpress淘宝i主题
  • 解决设计网站问题手机网站做分享到朋友圈
  • 电子商务网站建设课件南平建设集集团网站
  • 开源门户网站建设方案美发营销型网站
  • 东莞网站建设制作公司怎么做离线网站
  • 定制网站开发系统网站建设属于
  • wordpress能做流量站吗建筑贴图素材网站
  • 建设网站的价格是多少响应式网站的字体设置
  • 网站外链建设到底该怎么做wordpress视频优化
  • 网站写手怎么做wordpress没有API解析接口怎办
  • 中英文网站开发费用优秀网站模板欣赏
  • 做网站找那些公司成都建站模板公司
  • 网站建设销售岗位职责wordpress摘要p
  • 手机壁纸网站大全洛阳霞光企业网站建设公司
  • 男女怎样做那个视频网站兰州做网站公司哪家好
  • 搜索引擎营销的过程google seo 优化
  • 专业网站排名优化车票网站模板
  • 建设网站如入什么费产品如何做线上推广
  • 有没有专门做数据分析的网站wordpress七牛云图床插件
  • 金花站长工具免费公司介绍网站怎么做
  • 网站建设常州青之峰织梦网站广告代码教程
  • 外贸网站设计郑州网站开发国内现状