aqs底层原理?
AQS(AbstractQueuedSynchronizer)是Java并发包中的一个底层工具类,用于实现同步器的基本功能。它通过一个FIFO的双向队列来管理线程的排队和唤醒操作,实现了独占锁和共享锁的机制。
AQS的底层原理主要包括状态的维护、线程的排队和唤醒、锁的获取和释放等。
它通过CAS操作来更新状态,使用volatile变量来保证状态的可见性,通过自旋和阻塞来实现线程的排队和唤醒,从而实现了高效的同步机制。AQS的设计灵活性高,可以用于实现各种同步器,如ReentrantLock、CountDownLatch等。
countdownlatch的用法?
CountDownLatch是Java中的一个同步工具类,用于控制多个线程的执行顺序。
它的用法如下:1. 首先,创建一个CountDownLatch对象,并指定计数器的初始值,即需要等待的线程数。
2. 在需要等待的线程中,调用CountDownLatch的await()方法,使线程进入等待状态,直到计数器的值减为0。
3. 在其他线程中,执行需要等待的操作,完成后调用CountDownLatch的countDown()方法,将计数器的值减1。
4. 当计数器的值减为0时,所有等待的线程将被唤醒,继续执行。
CountDownLatch的使用场景是,当一个任务需要等待多个子任务完成后才能继续执行时,可以使用CountDownLatch来实现线程的同步。
CountDownLatch的实现原理是通过使用AQS(AbstractQueuedSynchronizer)来实现的。
AQS是Java并发包中的一个基础类,用于实现同步器的底层机制。
在CountDownLatch中,AQS的状态表示了计数器的值,线程的等待和唤醒操作则是通过AQS的等待队列来实现的。
CountDownLatch在并发编程中非常有用,可以用于控制多个线程的执行顺序,实现线程之间的协作。
它可以用于各种场景,例如主线程等待多个子线程完成后再继续执行,多个线程等待某个共享资源的初始化完成等。
总之,CountDownLatch是一种非常实用的同步工具,通过明确的计数机制和线程等待唤醒机制,可以有效地控制多个线程的执行顺序,提高并发编程的效率和可靠性。
JAVA架构之线程池是怎样工作的?
java.util.concurrent包中我们能找到线程池的定义,其中ThreadPoolExecutor是我们线程池核心类,首先看看线程池类的主要参数有哪些。
corePoolSize:线程池的核心大小,也可以理解为最小的线程池大小。
maximumPoolSize:最大线程池大小。
keepAliveTime:空余线程存活时间,指的是超过corePoolSize的空余线程达到多长时间才进行销毁。
unit:销毁时间单位。
workQueue:存储等待执行线程的工作队列。
threadFactory:创建线程的工厂,一般用默认即可。
handler:拒绝策略,当工作队列、线程池全已满时如何拒绝新任务,默认抛出异常。
线程池工作流程
1、如果线程池中的线程小于corePoolSize时就会创建新线程直接执行任务。
2、如果线程池中的线程大于corePoolSize时就会暂时把任务存储到工作队列workQueue中等待执行。
3、如果工作队列workQueue也满时:当线程数小于最大线程池数maximumPoolSize时就会创建新线程来处理,而线程数大于等于最大线程池数maximumPoolSize时就会执行拒绝策略。

