java线程池的面试题_献给准备面试的你,Java线程and线程池面试题小结「建议收藏」

java线程池的面试题_献给准备面试的你,Java线程and线程池面试题小结「建议收藏」最近这几天一直在整理Java相关的面试题,“金九银十”是求职的最佳时间,但是现在的“银十”也已经过去了一半的时间,相信现在还在为面试四处奔波的小伙伴已经很疲惫了吧,下面就来减轻你负担,Java线程和线程池相关的面试题整理给大家,减轻你准备面试的负担。丑话说在前面,我“丑”我先说,嘿嘿。因为篇幅有限,所以这次的文章不会包含面试题的所有的内容,在这里求大家点一波关注啦!以后会持续更新哒!1、为什么用线…

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

最近这几天一直在整理Java相关的面试题,“金九银十”是求职的最佳时间,但是现在的“银十”也已经过去了一半的时间,相信现在还在为面试四处奔波的小伙伴已经很疲惫了吧,下面就来减轻你负担,Java线程和线程池相关的面试题整理给大家,减轻你准备面试的负担。

丑话说在前面,我“丑”我先说,嘿嘿。因为篇幅有限,所以这次的文章不会包含面试题的所有的内容,在这里求大家点一波关注啦!以后会持续更新哒!

1、为什么用线程池?

有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。

而且当线程数量太多时,系统不一定能受得了。

使用线程池主要为了解决一下几个问题:通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。

对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。97dc67497672b68b4fbe134c2e854930.png

2、线程池参数什么意思?

比如去火车站买票, 有10个售票窗口, 但只有5个窗口对外开放. 那么对外开放的5个窗口称为核心线程数, 而最大线程数是10个窗口.

如果5个窗口都被占用, 那么后来的人就必须在后面排队, 但后来售票厅人越来越多, 已经人满为患, 就类似于线程队列已满.这时候火车站站长下令, 把剩下的5个窗口也打开, 也就是目前已经有10个窗口同时运行. 后来又来了一批人,10个窗口也处理不过来了, 而且售票厅人已经满了, 这时候站长就下令封锁入口,不允许其他人再进来, 这就是线程异常处理策略.而线程存活时间指的是, 允许售票员休息的最长时间, 以此限制售票员偷懒的行为.

3、程序、进程、线程的区别是什么? 举个现实的例子说明。

程序(Program):是一个指令的集合。程序不能独立执行,只有被加载到内存中,系统为它分配资源后才能执行。

进程(Process):如上所述,一个执行中的程序称为进程。进程是系统分配资源的独立单位,每个进程占有特定的地址空间。

程序是进程的静态文本描述,进程是程序在系统内顺序执行的动态活动。

线程(Thread):是进程的“单一的连续控制流程“。线程是CPU调度和分配的基本单位,是比进程更小的能独立运行的基本单位,也被称为轻量级的进程。

线程不能独立存在,必须依附于某个进程。一个进程可以包括多个并行的线程,一个线程肯定属于一个进程。Java虚拟机允许应用程序并发地执行多个线程。

举例:如一个车间是一个程序,一个正在进行生产任务的车间是一个进程,车间内每个从事不同工作的工人是一个线程。

4、Java中通过哪些方式创建多线程类?继承Thread类创建线程

实现Runnable接口创建线程

实现Callable接口通过FutureTask包装器来创建Thread线程

使用ExecutorService、Callable、Future实现有返回结果的线程

5、Thread类有没有实现Runnable接口?2d59bc46017ad2d4d64b5973d6ccbad0.png

46ec63682344870712bbf723d01832ba.png

6、当调用一个线程对象的start方法后,线程马上进入运行状态吗?

不是,只是进入就绪(可运行)状态,等待分配CPU时间片。一旦得到CPU时间片,即进入运行状态。

7、线程的几种状态

1.线程通常有五种状态,创建,就绪,运行、阻塞和死亡状态。

2.阻塞的情况又分为三种:

(1)、等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒,wait是object类的方法

(2)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。

(3)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。sleep是Thread类的方法436eda4c5734e35cf95a0d858e416c9a.png

编辑搜图

请点击输入图片描述

1.新建状态(New):新创建了一个线程对象。

2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

4.阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。

5.死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

8、wait方法被调用时,所在线程是否会释放所持有的锁资源? sleep方法呢?

wait:释放CPU,释放锁;

sleep:释放CPU,不释放锁。

最后,创作不易,请大家多多支持我,点点关注不迷路,转发评论工作顺利呀!

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142944.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月22日 下午4:00
下一篇 2022年5月22日 下午4:20


相关推荐

  • C语言实现【关机程序】「建议收藏」

    C语言实现【关机程序】「建议收藏」在讲解关机程序前,必须得先知道一个库函数system(“shutdown-s-t60”)和system(“shutdown-a),其中“shutdown-s”表示关机,“shutdown-a”表示取消关机,“-t60”表示延迟60秒;而要使用该库函数就得引头文件#include<stdlib.h>。下面开始实现关机程序了:#include<stdio.h>#include<stdlib.h>#include<string.h>int.

    2022年7月22日
    11
  • echarts中国地图(百度地图)

    echarts中国地图(百度地图)script varmyChart echarts init document getElementBy map vardata1 map safe vargeoCoordM 海门 121 15 31 89 鄂尔多斯 109 39 招远 120 38 37 35 舟山 122 29 齐齐哈尔 123 97 script

    2026年3月26日
    2
  • full connection layer(inconnected)

    我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~定义…

    2022年4月16日
    49
  • 计算机中的流水线技术到底是个啥?

    计算机中的流水线技术到底是个啥?史上最详细的图解计算机流水线技术

    2026年3月18日
    1
  • 决策树算法(Bagging与随机森林)

    决策树算法(Bagging与随机森林)

    2021年11月19日
    49
  • JAVAdebug_java如何设置断点

    JAVAdebug_java如何设置断点大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。以eclipse为例,debug的用法:1、首先在一个java文件中设断点,然后debugas,opendebugDialog,然后在对话框中选类后,Run。2、F5键与F6键均为单步调试,F5是stepinto,也就是进入本行代码中执行,F6是stepover,也就是执行本行代码,跳到下一行。3、F7是跳出函数,F8是…

    2022年10月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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