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

2022-08-31 17:36:36 浏览数 (1)

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

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

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

1、为什么用线程池?

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

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

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

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

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接口?

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类的方法

编辑搜图

请点击输入图片描述

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

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

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

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

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

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

wait:释放CPU,释放锁;

sleep:释放CPU,不释放锁。

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

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

0 人点赞