java线程池面试题有哪些?java线程池常见面试题「建议收藏」

java线程池面试题有哪些?java线程池常见面试题「建议收藏」进行java面试的过程中,java线程池是必问的面试题目,因为这是java的重点知识,也是在java工作中经常会遇到的,那java线程池面试题有哪些?下面来我们就来给大家讲解一下java线程池常见面试题。1.了解过线程池的工作原理吗?当线程池中有任务需要执行时,线程池会判断如果线程数量没有超过核心数量就会新建线程池进行任务执行,如果线程池中的线程数量已经超过核心线程数,这时候任务就会被放入任务队列中排队等待执行;如果任务队列超过最大队列数,并且线程池没有达到最大线程数,就会新建线程来执行任务;如果超过了

大家好,又见面了,我是你们的朋友全栈君。

进行java面试的过程中,java线程池是必问的面试题目,因为这是java的重点知识,也是在java工作中经常会遇到的,那java线程池面试题有哪些?下面来我们就来给大家讲解一下java线程池常见面试题。

1.了解过线程池的工作原理吗?

当线程池中有任务需要执行时,线程池会判断如果线程数量没有超过核心数量就会新建线程池进行任务执行,如果线程池中的线程数量已经超过核心线程数,这时候任务就会被放入任务队列中排队等待执行;如果任务队列超过最大队列数,并且线程池没有达到最大线程数,就会新建线程来执行任务;如果超过了最大线程数,就会执行拒绝执行策略。

2.线程池为什么要使用阻塞队列而不使用非阻塞队列?

阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使得线程进入wait状态,释放cpu资源。当队列中有任务时才唤醒对应线程从队列中取出消息进行执行。使得在线程不至于一直占用cpu资源。(线程执行完任务后通过循环再次从任务队列中取出任务进行执行,代码片段如下

while (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,是一种拒绝策略,咱们能够在任务满了以后,拒绝执行某些任务。

6.execute和submit的区别?

execute():提交不须要返回值的任务;

submit():提交须要返回值的任务;

Java每个工作线程都可以被重复利用,可执行多个任务,可见它的重要性,所以对于java线程的面试题我们可以多看多做,对面试有好处!最后大家如果想要了解更多[Java面试题]知识,敬请关注Java进阶营。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141358.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 对接第三方接口,其中图片是经过Base64加密的「建议收藏」

    对接第三方接口,其中图片是经过Base64加密的「建议收藏」1.简介httppost请求第三方接口,返回图片的信息是经过Base64加密的,如下:<details><summary>点击时的区域标题:点击查看详细内容</summary><p>-测试测试测试</p><pre><code>title,value,callBack可以缺省</code></pre></details><?xmlversion

  • TMS VCL控件工作室TMS Component Studio「建议收藏」

    TMS VCL控件工作室TMS Component Studio「建议收藏」TMSComponentStudio包含了8个控件包:TMSUnicodeComponentPackTMSSkinFactoryTMSInstrumentationWorkshopTMSComponentPackTMSAdvancedToolbars&MenusTMSAsync32TMSIntraWeb

  • java ResourceBundle介绍「建议收藏」

    java ResourceBundle介绍「建议收藏」publicabstractclassResourceBundleextendsObject下列类的父类:ListResourceBundle,PropertyResourceBundle资源束包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时,如String,程序可以从适合当前用户语言环境的资源束中装入它。以这种方式,可以写大部分独立于用户语言环境的程序

  • java零基础自学_Java零基础自学经验

    java零基础自学_Java零基础自学经验Java零基础自学经验学习Java数学不好行不行?要到能自己开发小软件的水平要多久,入门需要看些什么材料啊,网上资料不是很好,培训又要花钱,新手零基础如何自学Java比较快速?下面是由百分网小编为大家整理的Java零基础自学经验,喜欢的可以收藏一下!了解更多详情资讯,请关注应届毕业生考试网!下面分享新新人类的自学经验之谈:我学了2周了,已经入门了,基本代码都能看懂,看不懂的研究研究也就懂了。重点是…

  • C#开源资源大汇总

    C#开源资源大汇总

  • 虚拟机的桥接模式和NAT模式[通俗易懂]

    虚拟机的桥接模式和NAT模式[通俗易懂]1.桥接模式桥接模式:直接连接物理网络,也就是连的你交换机的网络和你主机的IP在一个网段上将虚拟机出来的计算机,直接连入当前的网络环境中,并且独占IP.特点:在当前网络中的全部计算机,都可以访问虚拟机.弊端:1.Ip地址可能会发生变化192.150.1.100/192.168.1.1012.如果这时传递文件时需要依靠交换机/路由器2.NAT模式说明:相当于在windows系…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号