梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人

频道:今日头条 日期: 浏览:313

Spring日加立Boot加载Bean的几种办法

  1. 经过@ComponentScan注解,在@SpringBootApplication里边就包含了@ComponentScan,把工程中的@Component、@Configuration等注解找到,参加Spring容器。
  2. @Bean注解
  3. @Import注解
  4. @EnableAutoConfiguration注解,spring-boot会运用AutoConfigurationImportSelector查找一切jar包中META-INF文件夹中spring.factories

voalite

volatile润饰的变量具有可见性,檄组词对变量的操作在内存中进行,对一切线程同享变量,而且部分阻挠了指令重排的发作,约束编译器对润饰变量的相关读写操作和指令重排。

volatile和synchronized的差异

  1. volatile仅能运用在变量上,synchronized能够运用在变量和办法与类等级上;
  2. volatile仅能完结变量的可见性,不能确保原子性,synchronized能够确保变量的可见性和原子性;
  3. volatile不会形成线程堵塞,synchronized可能会形成线程堵塞(因为volatile仅仅将当时变量的值及时奉告一切线程,而synchron青蓝记ized是确定当时变量不让其它线程拜访);
  4. volat梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人ile符号的变量不会被编译器优化(因为不能指令重排),synchronized符号的变量能够被编译器优化;
  5. volatile润饰变量合适于一写多读的并发场景,而多写场景必定会发生线程安全问题(因而运用volatile而不是synchronized的仅有安全情撸丝片二区况是类中只需一个可变的域)。
  6. 因为一切的操作都需求同三彩松鼠步给内存变量,所以volatile必定会使线程的履行速度变慢。

volatile与static

  1. 确保一致性,不确保仅有性,多个实例有多个volatile变量。
  2. 确保仅有性,不确保一致性,多个实例同享一个静态变量。

线程

怎样创立线程

  1. 承继Thread类,重写run()办法,调用Thread的start()办法。
  2. 完结Runnable接口(引荐运用),并完结该结构的run()办法,创立Thread方针,用完结Runnable接口的方针作为参数实例化该Thread方针,调用Thread的start()办法。
  3. 完结Callable接口,重写call()办法,Callable接口实践是归于Executor结构中的功用类,Callable结构与Runnable接口的功用相似,但供给了比Runnable更强壮的功用,首要体现在如下三点:
  • Callable在使命完毕后能够供给一个回来值,Runn孔军超able无法供给该功用。
  • Callable中的c我和林妹妹all()办法能够跑出反常,而Runnable中的run()不能跑出反常。
  • Callable能够拿到一个Future对梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人象,Future方针表明异步核算的成果,它供给能了查看核算是否完结的办法。因为线程输入异步核算模型,因而无法从其他线程中得到函数的回来值,在这种状况下,就能够运用Future来监控方针线程来调用call()办法的状况,当调用Future的get()办法以获取成果时,当时线程会堵塞,直到方针线程的call()办法完毕回来成果。

线程的状况-生命周期

  1. 创立: 经过new关键字创立后,进入到重生状况
  2. 安排妥当: 调用start后进入安排妥当状况
  3. 运转: CPU调度到本线程后,本线程开端履行。进入到运转状况
  4. 堵塞: 运转中梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人遇到join,yield,sleep形成堵塞,进入堵塞状况。堵塞完结后,又回到安排妥当状况
  5. 停止: 线程正常履行完,或许遇到反常停止后,进入逝世状况

多线程

怎样处理多线程数据同步

  1. synchronized关键字,首要用于synchronize办法和synchronize代码块
  2. wait()办法与notify()办法
  3. Lock,JDK5新增加Lock接口以及它的一个完结类ReentrantLock(重入锁),也能够完结多线程的同步;需求自己unlock开释mncc33锁
  • a. lock():以堵塞的办法获取锁,也就是说,假如获取到了锁,就会履行,其他线程需求等候,unloc巴登多杰大师最新信息k()锁后别逐字五笔怎样打的线程才干履行,假如其他线程陈键明持有锁,当时线程等候,直到获取锁后回来。
  • b. tryLock()。以非堵塞的办法获取锁。仅仅测验性地去获取一下锁,假如获取到锁,当即回来true,不然,回来false。
  • c. tryLock(long timeout,TimeUnit unit)。在给定的时刻单元内,获取到了锁回来true,不然fal赵灵柳se。
  • d. lockInterruptibly(). 假如获取了锁,当即回来;假如没有锁,当时线程处于休眠状况,直到获取锁,或许当时线程被中止(会收到Interrupte梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人dException九尊忠济堂反常)。它与lock()办法最大的差异在于假如(蝶阀ghval)办法获取不到锁,就会一向处于堵塞状况,且会疏忽Interrupt()办法。

线程池

线程池是一种多线程处理方法,处理过程中将使命提交到线程池,使命的履行交由线程池来办理

线程池的优点

  1. 下降资源耗费:能够重复运用已创立的线程下降线程创立和毁掉形成的耗费。
  2. 进步响应速度:当使命抵达时,使命能够不需求比及线程创立就能当即履行。
  3. 进步线程的可办理性:线程是稀缺资源,假如无约束地创立,不只会耗费体系资源,还会下降体系的稳定性,运用线程池能够进行统一分配、调优和监控

线程池的作业原理

  1. 线程池判别中心线程池里的线程是否都在履行使命。假如不是,则创立一个新常建祥的作业线程来履行使命。假如中心线程池里的线程都在履行使命,四川飞普科技有限公司则履行第二步。
  2. 线程池判别作业行列是否现已满。假如作业行列没有满,则将宋薇张豪新提交的使命存储在这个作业行列里进行等候。假如作业行列满了,则履行第三步
  3. 线程池判别线程池的线程是否都处于作业状况。假如没有,则创立一个新的作业线程来履行使命。假如现已满了,则交给饱梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人和战略(回绝战略)来处理这个使命

创立线程池的几种办法(线程池品种)

  1. 单线程的线程池 (SingleThreadExecutor): 按次序履行
  2. 固定巨细的线程池(FixedThreadPool):到达最大值时,坚持不变,等候老线程完毕或反常,新线程替代
  3. 可缓存的线程池(CachedThreadPool):创立一个可缓存的线程池。假如线程池的巨细超过了处理使命所需求的线程,那么就会收回部分闲暇的线程,当使命数增加时,此线程池又增加新线程来处理使命,能够无限扩展的线程池,比较合适处理履行时刻比较小的使命
  4. 守时线程池(ScheduledThreadPool):支撑守时以及周期性履行使命的需求
  5. JDK8新增(WorkStealingPool):会依据所需的并行等级参数来动态创立和封闭线程,默许运用CPU数量,经过运用多个行列削减竞赛,底层用的ForkJoinPool来完结的。支撑把一个使命拆分红多个“小使命”,把多个“小使命”放到多个处理器中心上并行履行;当多个“小使命”履行完结之后,再将这些履行成果兼并起来

说说线程池的拒逆战猎魔圣匙绝战略

Ab梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人ortPolicy战略:该战略会直接抛出反常,阻挠体系正常作业。

CallerRunsPolicy 战略:只需线程池未封闭,该战略直接在调用者线程中,运转当时的被丢掉的使命。

DiscardOleddestPolicy战略: 该战略将丢掉最老的一个恳求,并尝兰酱直播间试再梅根福克斯,java面试之SpringBoot加载Bean、voalite、线程、多线程、线程池,曾道人次提交当时使命。

DiscardPolicy战略:该战略静静的丢掉无法处理的使命,不予任何处理。

自定义战略:完结RejectedExecutionHandler接口