当前位置: 首页 > 后端技术 > Java

【Java面试】简述你对线程池的理解?

时间:2023-04-01 17:57:36 Java

这是什么面试题?让一个干了4年的意气风发的家伙,随便去个技术面试,他就郁闷死了。郁闷!这一切的背后是道德的沦丧,或者说是人性的扭曲。让我们一起来揭开这个面试题的神秘面纱。关于,《简述你对线程池的理解》,看普通人和专家的回答。普通人:嗯。.........师父:这个问题我从几个方面来回答。首先,线程池本质上是一种池化技术,池化技术是一种资源复用的思想。比较常见的有连接池、内存池、对象池。线程池重用线程资源。我认为有两个核心的设计目标:减少频繁创建和销毁线程带来的性能开销,因为线程的创建会涉及CPU上下文切换、内存分配等。线程池本身有参数来控制创建线程的数量,这样就可以避免无休止的线程创建导致资源占用过高的问题,起到了资源保护的作用。其次,简单说一下线程池中的线程复用技术。因为线程本身不是一种受控技术,也就是说,线程的生命周期是由任务运行的状态决定的,是人无法控制的。因此,为了实现线程复用,在线程池中使用了阻塞队列。简单的说,线程池中的工作线程一直在运行,它会从阻塞队列中获取待执行的任务。一旦队列为空,那么这个工作线程就会被阻塞,直到下一次有新的任务进来。即根据任务的情况阻塞和唤醒工作线程,从而达到线程复用的目的。最后,线程池中的资源限制由几个关键参数控制,即核心线程数和最大线程数。核心线程数代表默认的长期工作线程,最大线程数是根据任务情况动态创建的线程,主要是为了提高阻塞队列中任务的处理效率。以上是我对这个问题的理解!综上所述,当我在阅读线程池的源码时,被其中的各种设计思想惊艳到了。比如动态扩缩容的思想,线程复用的思想,线程回收的方法等等,我发现越简单的东西越不简单。更多面试资料和面试技巧可以私信我获取。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!