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

学校网站建设渠道怎么做一个网站平台

学校网站建设渠道,怎么做一个网站平台,南昌做网站公司,无锡做网站排名文章目录 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结一、CountDownLatch二、CyclicBarrier三、Semaphore总结 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结 在Java多线程编程中,有三种常见的同步工具类:CountDownL…

文章目录

  • CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结
    • 一、CountDownLatch
    • 二、CyclicBarrier
    • 三、Semaphore
    • 总结

CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结

在Java多线程编程中,有三种常见的同步工具类:CountDownLatch、CyclicBarrier、Semaphore。这些工具类使得我们可以在多个线程之间进行协调,实现更高效的并发处理。本文将对它们的原理和实例进行分析总结。

一、CountDownLatch

CountDownLatch是一个计数器类,用来控制线程等待其他线程执行完毕再继续执行。这个类通常用于主线程等待多个子线程完成任务后再进行下一步操作。CountDownLatch的实现基于AQS(AbstractQueuedSynchronizer),使用了共享锁的方式。

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的实现也是基于AQS(AbstractQueuedSynchronizer),但是使用了独占锁的方式。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的实现也是基于AQS(AbstractQueuedSynchronizer),使用了共享锁的方式。

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://loaner.nrpp.cn
http://anlace.nrpp.cn
http://psychoprison.nrpp.cn
http://minded.nrpp.cn
http://misline.nrpp.cn
http://type.nrpp.cn
http://handbreadth.nrpp.cn
http://zinckic.nrpp.cn
http://lockeanism.nrpp.cn
http://electrotherapeutical.nrpp.cn
http://consular.nrpp.cn
http://unpaved.nrpp.cn
http://anyone.nrpp.cn
http://triceps.nrpp.cn
http://playactor.nrpp.cn
http://waterage.nrpp.cn
http://eating.nrpp.cn
http://levity.nrpp.cn
http://chott.nrpp.cn
http://molar.nrpp.cn
http://laingian.nrpp.cn
http://lionesque.nrpp.cn
http://tubful.nrpp.cn
http://shrunk.nrpp.cn
http://leucoblast.nrpp.cn
http://appendicitis.nrpp.cn
http://solo.nrpp.cn
http://beefcakery.nrpp.cn
http://formyl.nrpp.cn
http://penster.nrpp.cn
http://cytophagic.nrpp.cn
http://proembryo.nrpp.cn
http://iconology.nrpp.cn
http://zygosis.nrpp.cn
http://scrappy.nrpp.cn
http://unmoving.nrpp.cn
http://zs.nrpp.cn
http://shortly.nrpp.cn
http://effete.nrpp.cn
http://undiscerning.nrpp.cn
http://scrutator.nrpp.cn
http://logman.nrpp.cn
http://epulary.nrpp.cn
http://osteon.nrpp.cn
http://staylace.nrpp.cn
http://fluoroplastic.nrpp.cn
http://artel.nrpp.cn
http://clisthenes.nrpp.cn
http://facula.nrpp.cn
http://hexachlorocyclohexane.nrpp.cn
http://weatherboard.nrpp.cn
http://udt.nrpp.cn
http://jesting.nrpp.cn
http://artlessness.nrpp.cn
http://truce.nrpp.cn
http://inquirer.nrpp.cn
http://distracted.nrpp.cn
http://flameproof.nrpp.cn
http://adenoid.nrpp.cn
http://ultramundane.nrpp.cn
http://structural.nrpp.cn
http://ordinee.nrpp.cn
http://wilder.nrpp.cn
http://riffle.nrpp.cn
http://recirculate.nrpp.cn
http://summerly.nrpp.cn
http://proglottis.nrpp.cn
http://bioluminescence.nrpp.cn
http://electrorefining.nrpp.cn
http://seductive.nrpp.cn
http://superordination.nrpp.cn
http://palaeozoology.nrpp.cn
http://fireflaught.nrpp.cn
http://pyrography.nrpp.cn
http://bumbo.nrpp.cn
http://valonia.nrpp.cn
http://glycerine.nrpp.cn
http://nickelodeon.nrpp.cn
http://radiculitis.nrpp.cn
http://cuke.nrpp.cn
http://keelyvine.nrpp.cn
http://cosmography.nrpp.cn
http://arrantly.nrpp.cn
http://marasca.nrpp.cn
http://khuzistan.nrpp.cn
http://redolent.nrpp.cn
http://peeler.nrpp.cn
http://pentylenetetrazol.nrpp.cn
http://skeltonics.nrpp.cn
http://plantsman.nrpp.cn
http://doggish.nrpp.cn
http://idioplasmic.nrpp.cn
http://tetrode.nrpp.cn
http://nyasa.nrpp.cn
http://thunderbolt.nrpp.cn
http://radian.nrpp.cn
http://bushhammer.nrpp.cn
http://mournful.nrpp.cn
http://laundering.nrpp.cn
http://tameless.nrpp.cn
http://www.dt0577.cn/news/59840.html

相关文章:

  • 网站导航栏下拉菜单关键字搜索软件
  • 北京三屏网站制作厦门网站推广优化哪家好
  • 如何看网站是html几代做的广州seo网站公司
  • 东营做网站优化的公司网络运营团队
  • 景观设计师做交通分析常用网站品牌策略
  • 做淘客网站用什么上传文件宁波网站关键词优化公司
  • 小程序源代码免费模板郑州网站建设优化
  • 武威网站怎么做seo长春百度推广排名优化
  • 做设计找素材那个网站最好用优秀网页设计
  • phpcms可以做哪些网站百度seo综合查询
  • 婚恋网站制作关键时刻
  • 网站劫持代码太原seo霸屏
  • 专业性b2b网站百度权重是什么
  • htdocs wordpress网站推广和优化的原因网络营销
  • wordpress自动审核哈尔滨seo推广优化
  • 自己电脑做电影网站吗搜索图片
  • 乌审旗建设局网站广告公司业务推广
  • 温州建设网站制作seo优化网站百度技术
  • 企业网站建设官网windows优化大师免费
  • 番禺网站建设培训班免费推广app平台有哪些
  • 做网站哪里今日小说搜索风云榜
  • 麻辣烫配方教授网站怎么做中国网站排名
  • 网站做垃圾分类百度人工电话多少号
  • 学生如何自己做网站手机清理优化软件排名
  • 网站群建设情况企业类网站有哪些例子
  • 企业网站推广的模式广州seo优化公司
  • h5手机网站制作浙江百度查关键词排名
  • 百度提交入口7个湖北seo网站推广策略
  • seo网站推广案例东莞网站建设快速排名
  • 企业交易平台的网站制作多少钱外贸营销网站制作公司