java线程池⾯试题有哪些?java线程池常见⾯试题
进⾏java⾯试的过程中,java线程池是必问的⾯试题⽬,因为这是java的重点知识,也是在java⼯作中经常会遇到的,那java线程池⾯试题有哪些?下⾯来我们就来给⼤家讲解⼀下java线程池常见⾯试题。怎样安装eclipse
1.了解过线程池的⼯作原理吗?
当线程池中有任务需要执⾏时,线程池会判断如果线程数量没有超过核⼼数量就会新建线程池进⾏任务执⾏,如果线程池中的线程数量已经超过核⼼线程数,这时候任务就会被放⼊任务队列中排队等待执⾏;如果任务队列超过最⼤队列数,并且线程池没有达到最⼤线程数,就会新建线程来执⾏任务;如果超过了最⼤线程数,就会执⾏拒绝执⾏策略。
2.线程池为什么要使⽤阻塞队列⽽不使⽤⾮阻塞队列?互站网可靠吗
阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使得线程进⼊wait状态,释放cpu资源。当队列中有任务时才唤醒对应线程从队列中取出消息进⾏执⾏。使得在线程不⾄于⼀直占⽤cpu资源。(线程执⾏完任务后通过循环再次从任务队列中取出任务进⾏执⾏,代码⽚段如下
options if your hdd is largerwhile (task != null || (task = getTask()) != null) {})。
不⽤阻塞队列也是可以的,不过实现起来⽐较⿇烦⽽已,有好⽤的为啥不⽤呢?
3.知道线程池中线程复⽤原理吗?
接口幂等性线程池将线程和任务进⾏解耦,线程是线程,任务是任务,摆脱了之前通过 Thread 创建线程时的⼀个线程必须对应⼀个任务的限制。
在线程池中,同⼀个线程可以从阻塞队列中不断获取新任务来执⾏,其核⼼原理在于线程池对 Thread 进⾏了封装,并不是每次执⾏任务都会调⽤ Thread.start() 来创建新线程,⽽是让每个线程去执⾏⼀个“循环任务”,在这个“循环任务”中不停的检查是否有任务需要被执⾏,如果有则直接执⾏,也就是调⽤任务中的 run ⽅法,将 run ⽅法当成⼀个普通的⽅法执⾏,通过这种⽅式将只使⽤固定的线程就将所有任务的 run ⽅法串联起来。在此我向⼤家推荐⼀个架构学习交流圈。交流学习伪鑫:1253431195(⾥⾯有⼤量的⾯试题及答案)⾥⾯会分享⼀些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,⾼并发、⾼性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,⽬前受益良多
4.如何向线程池中提交任务?
可以通过execute()或submit()两个⽅法向线程池提交任务。
execute()⽅法没有返回值,所以⽆法判断任务知否被线程池执⾏成功。
submit()⽅法返回⼀个future,那么我们可以通过这个future来判断任务是否执⾏成功,通过future的get⽅法来获取返回值。
5.程池中的⼏种重要的参数?
corePoolSize就是线程池中的核⼼线程数量,这⼏个核⼼线程,只是在没有⽤的时候,也不会被回收;
maximumPoolSize就是线程池中能够容纳的最⼤线程的数量;
keepAliveTime,就是线程池中除了核⼼线程以外的其余的最长能够保留的时间,由于在线程池中,除了核⼼线程即便在⽆任务的状况下也不能被清除,其他的都是有存活时间的,意思就是⾮核⼼线程能够保留的最长的空闲时间;在此我向⼤家推荐⼀个架构学习交流圈。交流学习伪鑫:1253431195(⾥⾯有⼤量的⾯试题及答案)⾥⾯会分享⼀些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,⾼并发、⾼性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,⽬前受益良多
util,就是计算这个时间的⼀个单位。
workQueue,就是等待队列,任务能够储存在任务队列中等待被执⾏,执⾏的是FIFIO原则(先进先出)。
threadFactory,就是建⽴线程的线程⼯⼚。
handler,是⼀种拒绝策略,咱们能够在任务满了以后,拒绝执⾏某些任务。
instrumental nature soundsexecute():提交不须要返回值的任务;
java常见笔试题submit():提交须要返回值的任务;
Java每个⼯作线程都可以被重复利⽤,可执⾏多个任务,可见它的重要性,所以对于java线程的⾯试题我们可以多看多做,对⾯试有好处!最后⼤家如果想要了解更多[Java⾯试题]知识,敬请关注Java进阶营。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论