java面试题-JUC基础类介绍

1.JUC框架包含几个部分?

五个部分:

  • Lock框架和Tools类(把图中这两个放到一起理解)

  • Collections: 并发集合

  • Atomic: 原子类

  • Executors: 线程池

2.Lock框架和Tools哪些核心的类?

  1. Lock接口:用于提供比synchronized更加灵活和高级的线程同步控制,支持公平/非公平锁、可中断的获取锁、超时获取锁等功能。

  1. ReentrantLock类:Lock接口的主要实现类,提供与synchronized类似的功能,但更加灵活,支持公平/非公平锁、可重入性、可中断的获取锁、超时获取锁等功能。

  1. ReadWriteLock接口:提供读写锁的支持,用于控制多个线程对共享数据的读写操作。

  1. ReentrantReadWriteLock类:ReadWriteLock接口的主要实现类,提供读写锁的功能,支持可重入性,同时支持多个线程同时读取共享数据,但只允许一个线程进行写操作。

  1. Condition接口:用于在锁的基础上更加灵活地控制线程的等待和唤醒操作。

  1. ReentrantLock.ConditionObject类:Condition接口的主要实现类,提供了等待和唤醒操作所需要的一系列方法。

  1. Semaphore类:用于控制同时访问某个资源的线程数,可以用于实现资源池的管理等功能。

  1. CountDownLatch类:用于控制多个线程的同步,可以让一个或多个线程等待其他线程执行完毕后再继续执行。

  1. CyclicBarrier类:用于控制多个线程的同步,可以让多个线程在同一时刻到达同一个屏障点,然后继续执行。

  1. Phaser类:用于控制多个线程的同步,支持多个阶段的同步,可以让多个线程在同一阶段结束后进入下一阶段,直到所有阶段都完成后才继续执行。

3.JUC并发集合哪些核心的类?

  1. ConcurrentHashMap:线程安全的哈希表,与 Hashtable 不同的是,它采用分段锁技术实现线程安全,多个线程可以同时访问不同的分段,从而大大提高了并发性能。

  1. CopyOnWriteArrayList:线程安全的 ArrayList,基于“写时复制”技术实现,当有新元素添加到集合时,先将原始数据复制一份,然后在新的集合上添加新元素,最后用新集合替换旧集合。

  1. CopyOnWriteArraySet:线程安全的 Set,基于 CopyOnWriteArrayList 实现,采用“写时复制”技术,保证了并发访问的安全性。

  1. ConcurrentLinkedQueue:非阻塞队列,基于链表实现,支持高并发、高吞吐量的队列操作。

  1. ConcurrentSkipListMap:跳表实现的 Map,线程安全,支持高并发、高吞吐量的并发操作。

  1. ConcurrentSkipListSet:跳表实现的 Set,线程安全,支持高并发、高吞吐量的并发操作。

  1. BlockingQueue:阻塞队列的接口,继承了 Queue 接口,提供了在队列已满或已空时的阻塞操作。

  1. ArrayBlockingQueue:有界阻塞队列,底层基于数组实现,当队列已满时,put 操作会阻塞;当队列已空时,take 操作会阻塞。

  1. LinkedBlockingQueue:基于链表实现的阻塞队列,可以指定容量,当队列已满时,put 操作会阻塞;当队列已空时,take 操作会阻塞。

  1. PriorityBlockingQueue:基于优先级的无界阻塞队列,元素按照优先级从高到低排序,当队列为空时,take 操作会阻塞。

4.JUC原子类哪些核心的类?

JUC原子类是一组以原子方式更新基本数据类型的类,其中包含了很多核心的类,其中最常用的包括:

  1. AtomicInteger系列:提供原子性的int类型操作,包括:AtomicInteger、AtomicIntegerArray、AtomicIntegerFieldUpdater。

  1. AtomicLong系列:提供原子性的long类型操作,包括:AtomicLong、AtomicLongArray、AtomicLongFieldUpdater。

  1. AtomicBoolean:提供原子性的boolean类型操作。

  1. AtomicReference系列:提供原子性的对象类型操作,包括:AtomicReference、AtomicReferenceArray、AtomicReferenceFieldUpdater。

  1. AtomicStampedReference:提供原子性的带版本号的对象引用类型操作,可以防止ABA问题。

  1. AtomicMarkableReference:提供原子性的带标记位的对象引用类型操作,可以在对象引用的同时维护一个boolean类型的标记位。

这些原子类都是通过一些底层的机制来保证操作的原子性和可见性,比如利用CAS操作,利用volatile关键字等。在多线程环境下,使用这些原子类能够提高程序的并发性能和可靠性。

5.JUC线程池哪些核心的类?

JUC线程池主要包括以下核心的类:

  1. Executor 接口:定义了一个用于执行任务的方法 void execute(Runnable command),是线程池的顶级接口。

  1. ExecutorService 接口:继承了 Executor 接口,定义了一些常用的线程池操作方法,例如提交任务、关闭线程池等。

  1. ThreadPoolExecutor 类:是线程池的实现类,可以通过构造函数自定义线程池的各种参数,例如核心线程数、最大线程数、队列容量、线程工厂等。该类继承了 AbstractExecutorService 抽象类,实现了 ExecutorService 接口。

  1. ScheduledExecutorService 接口:继承了 ExecutorService 接口,定义了延迟执行和周期执行任务的方法。

  1. ScheduledThreadPoolExecutor 类:是线程池的实现类,可以通过构造函数自定义线程池的各种参数,例如核心线程数、最大线程数、队列容量、线程工厂等。该类继承了 ThreadPoolExecutor 类,实现了 ScheduledExecutorService 接口。

JUC 线程池的核心类可以通过自定义参数,灵活地创建和管理线程池,提高系统性能和资源利用率。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值