【发布时间】:2019-01-04 03:50:24
【问题描述】:
我的要求是限制在任何时间点使用我的服务的线程数。执行者服务在这里没有帮助我,因为我的问题空间几乎没有什么不同。让我用一个例子来解释。
我已经公开了一个 REST API,它可以完成一项工作。在运行中,我的控制器调用其中一项服务来执行作业。但我必须确保只有“n”个线程访问该服务。这意味着线程/API 访问将持续增长,但在某些地方,如果“n”个线程已经在使用该服务,我必须让它们等待。并且在执行结束时,我应该得到服务的响应并返回到端点,然后返回到客户端。
如果我使用 FutureTask 和 callable,我将如何以及在哪里编写 .get() 方法?因为我的线程将在数量和性质上不断增长。
希望问题陈述清楚,如果需要更多说明,请告诉我。
【问题讨论】:
-
你可以使用
ExecutorService,只需创建一个大小为n的单例线程池。然后对于每个请求,您可以提交并等待响应。这样一来,您将只有n线程访问您的服务。 -
@SukhpalSingh 如果我正在使用提交,我该如何等待响应?提交将返回 FutureTask 对!。为了从 FutureTask 对象中检索响应,我需要调用 future.get(),但是什么时候调用这就是问题所在! :(
-
只在当时和那里调用它。每个 rest 调用都是从池中取出的一个新线程。
-
如果我只在那个时候调用,futuretask.get() 可能会返回 null,因为任务需要一些时间才能完成,对吗?如果我遗漏了什么,请纠正我。
-
get()在必要时等待计算完成,然后检索其结果。
标签: java multithreading threadpool executorservice futuretask