1.JUC下面的类有哪些
JUC就是java.util.concurrent包,这个包俗称JUC,里面都是解决并发问题的一些东西
该包的位置位于java下面的rt.jar包下面:
CountDownLatch
CyclicBarrier
Semaphore
ExChanger
CountDownLatch:
CountDownLatch,俗称闭锁,作用是类似加强版的Join,是让一组线程等待其他的线程完成工作以后才执行
就比如在启动框架服务的时候,我们主线程需要在环境线程初始化完成之后才能启动,这时候我们就可以实现使用CountDownLatch来完成
CyclicBarrier:
CyclicBarrier,俗称栅栏锁,作用是让一组线程到达某个屏障,被阻塞,一直到组内的最后一个线程到达,然后屏障开放,接着,所有的线程继续运行
Semaphore:
Semaphore,俗称信号量,作用于控制同时访问某个特定资源的线程数量,用在流量控制
特定资源控制,第一时间就想到了数据库连接,Semaphore 可以用来写数据库连接池
ExChanger:
Exchanger,俗称交换器,用于在线程之间交换数据,但是比较受限,因为只能两个线程之间交换数据
2.ConcurrentHashMap最大支持多少并发
ConcurrentHashMap的缺点就是他最多只能支持16个线程的并发,如果实际场景中,你需要启动的线程的数量比较多,还是同样会发生锁竞争和等待的问题
3.springboot的自动装配原理
springboot启动以后:
通过@EnableAutoConigration里的@lmport (AutoConfigurationlmportSelector.class) 实现配置类的导入,但是并不是传统意义上的单个导入,而是批量进行导入
AutoConfigurationlmportSelector类实现了ImpotSelector接口,重写了selectlmports()方法,用于实现批量装配通过SpringFactoriesLoader机制,扫描classpath路径下的META-INF/spring.factories 读取需要实现自动装配的配置类最终通过筛选的方式,把不符合的类剔除,最终完成SpringBoot的自动装配
(springboot通过根据配置文件,自动装配所属依赖的类,再用动态代理的方式注入到spring容器中)