JUC(java.util.concurrent)简介

JUC简介

JUC是 在Java 5.0添加的java.util.concurrent包的简称,包含在rt.jar中。它的目的就是为了更好的支持高并发任务,让开发者利用这个包进行的多线程编程时可以有效的减少竞争条件和死锁线程。

JUC组成

JUC由以下5部分组成:

1. tools 工具类

  1. CountDownLatch 闭锁, 是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
  2. CyclicBarrier 栅栏, 一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 ,并且在释放等待线程后可以重用。
  3. Semaphore 信号量, 是一个计数信号量,它的本质是一个“共享锁“。信号量维护了一个信号量许可集。线程可以通过调用 acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。

2. atomic 原子性包

包含有AtomicBooleanAtomicIntegerAtomicIntegerArray等原子变量类,他们的实现原理大多是持有它们各自的对应的类型变量value,而且被volatile关键字修饰了。这样来保证每次一个线程要使用它都会拿到最新的值。

3. locks 锁包

是JDK提供的锁机制,相比synchronized关键字来进行同步锁,功能更加强大,它为锁提供了一个框架,该框架允许更灵活地使用锁包含的实现类有:

  1. ReentrantLock 它是独占锁,是指只能被独自占领,即同一个时间点只能被一个线程锁获取到的锁。

  2. ReentrantReadWriteLock 它包括子类ReadLock和WriteLock。ReadLock是共享锁,而WriteLock是独占锁。

  3. LockSupport 它具备阻塞线程和解除阻塞线程的功能,并且不会引发死锁。

4. collections 并发集合包

  1. ArrayBlockingQueue 阻塞队列
  2. CopyOnWriteArrayList 并发ArrayList, 读多写少场景
  3. CopyOnWriteArraySetConcurrentSkipListSet并发HashSet,TreeSet
  4. ConcurrentHashMapConcurrentSkipListMap并发HashMap,TreeMap

5. Executor 执行者

Java里面线程池的顶级接口,但它只是一个执行线程的工具,真正的线程池接口是ExecutorService

  1. FixedThreadPool线程固定,无界缓冲队列,适用于任务数量不均匀,对内存压力不敏感的场景
  2. CacheThreadPool 不限线程数,适用于短时间要求低延迟的任务场景
  3. SingleThreadPool 适用于异步执行顺序的场景
  4. ScheduleThreadPool 支持固定频率和固定延迟的场景

你可能感兴趣的:(JAVA,并发编程,java,多线程,编程语言)