Java全栈知识点问题汇总(上)(三)

2023年 8月 28日 27.7k 0

续接上篇 Java全栈知识点问题汇总(上)-(二) Java并发 后续内容

3.8 JUC工具类

  • JUC工具类: CountDownLatch详解
  • JUC工具类: CyclicBarrier详解
  • JUC工具类: Semaphore详解
  • JUC工具类: Phaser详解
  • JUC工具类: Exchanger详解
  • Java 并发 - ThreadLocal详解

什么是CountDownLatch?

CountDownLatch底层也是由AQS,用来同步一个或多个任务的常用并发工具类,强制它们等待由其他任务执行的一组操作完成。

CountDownLatch底层实现原理?

其底层是由AQS提供支持,所以其数据结构可以参考AQS的数据结构,而AQS的数据结构核心就是两个虚拟队列: 同步队列sync queue 和条件队列condition queue,不同的条件会有不同的条件队列。CountDownLatch典型的用法是将一个程序分为n个互相独立的可解决任务,并创建值为n的CountDownLatch。当每一个任务完成时,都会在这个锁存器上调用countDown,等待问题被解决的任务调用这个锁存器的await,将他们自己拦住,直至锁存器计数结束。

CountDownLatch一次可以唤醒几个任务?

多个

CountDownLatch有哪些主要方法?

await(), 此函数将会使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。

countDown(), 此函数将递减锁存器的计数,如果计数到达零,则释放所有等待的线程

写道题:实现一个容器,提供两个方法,add,size 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束?

说出使用CountDownLatch 代替wait notify 好处?

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

/**
* 使用CountDownLatch 代替wait notify 好处是通讯方式简单,不涉及锁定 Count 值为0时当前线程继续执行,
*/
public class T3 {

  volatile List list = new ArrayList();

   public void add(int i){
       list.add(i);
  }

   public int getSize(){
       return list.size();
  }


   public static void main(String[] args) {
       T3 t = new T3();
       CountDownLatch countDownLatch = new CountDownLatch(1);

       new Thread(() -> {
           System.out.println("t2 start");
          if(t.getSize() != 5){
              try {
                  countDownLatch.await();
                  System.out.println("t2 end");
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
      },"t2").start();

       new Thread(()->{
           System.out.println("t1 start");
          for (int i = 0;i

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论