当前位置: 首页 > 面试题库 >

Java:Java 中的线程池是如何实现的

郭俊拔
2023-04-24

创建一个阻塞队列来容纳任务,在第一次执行任务时创建足够多的线程,并处理任务,之后每个工作线程自动从任务队列中获取线程,直到任务队列中任务为0为止,此时线程处于等待状态,一旦有工作任务加入任务队列中,即刻唤醒工作线程进行处理,实现线程的可复用性。

线程池一般包括四个基本组成部分:

(1)线程池管理器

用于创建线程池,销毁线程池,添加新任务。

(2)工作线程

线程池中线程,可循环执行任务,在没有任务时处于等待状态。

(3)任务队列

用于存放没有处理的任务,一种缓存机制。

(4)任务接口

每个任务必须实现的接口,供工作线程调度任务的执行,主要规定了任务的开始和收尾工作,和任务的状态。

 类似资料:
  • 可以通过中断 和 共享变量的方式实现线程间的通讯和协作 比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权

  • 本文向大家介绍jvm是如何实现线程的?相关面试题,主要包含被问及jvm是如何实现线程的?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JVM 线程是比进程更轻量级的调度执行单位。线程可以把一个进程的资源分配和执行调度分开。一个进程里可以启动多条线程,各个线程可共享该进程的资源(内存地址,文件IO等),又可以独立调度。线程是CPU调度的基本单位。 主流OS都提供线程实现。Java语言提供对线程

  • 我在C编程,但我只使用pthread. h,没有升压或C 11线程。 所以我试图使用线程,但是基于我之前的一个问题(链接),这似乎是不可行的,因为线程在完成任务后立即终止,使用线程池实现的一个更普遍的原因是通过以下方式减少线程创建开销为多个任务重用这些线程。 那么,在C中实现这一点的唯一其他方法是使用fork()并创建从主进程到子进程的管道吗?或者有没有一种方法可以在线程和它们的父线程之间设置一个

  • 问题内容: 我刚刚开始研究Java的类和方法。根据API,生成的线程池将现有对象重用于新任务。 我对此感到有些困惑,因为我无法在API中找到任何方法来设置现有对象的行为。 例如,您可以创建一个 新的 从一个对象,这使得调用的方法。但是,API中没有使用a 作为参数的setter方法。 我将不胜感激任何指针。 问题答案: 执行人员在后台为您完成所有工作。是的,它仅使用现有的线程API。 下面的链接提

  • 问题内容: 在花了很多时间讨论线程池概念之后,通过阅读不同数量的博客代码并在Stackoverflow.com上发布问题,现在我对这个概念有了清晰的认识。但是与此同时,我在代码中发现了一些疑问。 当; 在类中执行,它调用 ;。中的方法,在此方法中变量递增。但是我认为,从逻辑上讲,这是不正确的,因为如果线程数(在这种情况下为2)少于任务数(在TestThreadPool类中给出)(在这种情况下为5)

  • 出于学习的目的,我正在尝试用java实现自己的线程池。下面是我已经实现的。我对这个实现有几个问题: > 虽然我像内置java一样使用BlockingQueue执行器希望我们提供Runnable对象(通过执行方法)。但在我的情况下,我觉得我可以创建任何对象而不是Runnable。那么为什么Java执行器期望Runnable,我尝试查看源代码,但还不能弄清楚。 这个原始实现还有什么问题吗? 请找到密码