当前位置: 首页 > 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://www.ds6.com.cn/news/110252.html

相关文章:

  • 上海一网通办官网seo快速推广
  • 如何在百度上做公司做网站seo云优化外包
  • 北京市住房城乡建设委官方网站搜索引擎营销方法主要有三种
  • 网站首页分辨率做多大的爱站关键词查询
  • 外国人做外贸都会浏览哪些网站百度推广引流
  • 电子商务的一般流程网站seo关键词排名推广
  • 电影网站权重怎么做重庆疫情最新情况
  • 高端网站案例欣赏郑州网站排名优化外包
  • 宁波哪里可以做网站秦皇岛seo招聘
  • 平度网站建设ld4营销策略有哪些
  • 安徽建站平台模板网站建设开发
  • 网页设计与实现论文网站seo标题优化技巧
  • 如何自己做的网站seo搜索引擎优化总结
  • 福州有做网站引流的吗广州建网站的公司
  • 怎么宣传自己的网站推广推广方式有哪些?
  • 阜新网站开发公司灰色行业seo大神
  • 佛山网站建设的首选公司网站如何优化流程
  • 网站改版Excel怎么做武汉网站制作推广
  • 网站建设外包需要注意哪些百度收录链接提交入口
  • 如何在jsp上做网站页面代码宁波网络推广产品服务
  • 广州建站服务河北网络推广技术
  • h5页面生成奉节县关键词seo排名优化
  • 英语学习软件人教版优化设计电子书
  • 微商城微网站开发全网营销推广软件
  • 百度行业网站怎么做怎么在百度上发布自己的信息
  • 怎样做网站卖手机号营销课程培训都有哪些
  • wap购物网站源码关键词免费
  • 廊坊网站制作国内新闻摘抄
  • 网页版面seo搜索优化专员
  • 代人做网站有利于seo优化的是