Java 在executorservice场景中等待另一个线程
假设有三个使用executor服务创建的线程,现在我希望t2在t1之后开始运行,t3在t2之后开始运行。在线程池的情况下,如何实现这种场景Java 在executorservice场景中等待另一个线程,java,multithreading,Java,Multithreading,假设有三个使用executor服务创建的线程,现在我希望t2在t1之后开始运行,t3在t2之后开始运行。在线程池的情况下,如何实现这种场景 如果它将使用thread.start()创建任何普通线程。我可以使用join()方法等待。但是如何处理上述场景呢?线程t1、t2和t3可以实现可调用接口,并且可以从调用方法返回一些值。 根据返回值,在t1返回后,可以启动t2,类似地,也可以启动t3 “可调用”就是它的答案您混淆了线程的概念以及在线程上执行的内容。线程池中的线程何时“启动”并不重要,但处理的执
如果它将使用thread.start()创建任何普通线程。我可以使用join()方法等待。但是如何处理上述场景呢?线程t1、t2和t3可以实现可调用接口,并且可以从调用方法返回一些值。 根据返回值,在t1返回后,可以启动t2,类似地,也可以启动t3
“可调用”就是它的答案您混淆了线程的概念以及在线程上执行的内容。线程池中的线程何时“启动”并不重要,但处理的执行何时开始或继续并不重要。因此,更好的说法是,您有3个
可调用项
或可运行项
,您需要其中一个在继续之前等待另外两个。这是通过使用一个。创建计数为2的共享闩锁。两个可调用项
将调用闩锁,应该等待的将调用(可能会超时)。提交给ExecutorService的作业必须相互独立。如果您试图通过等待信号量、倒计时闩锁或类似方式来建立依赖关系,那么当所有可用工作线程执行等待已提交作业但在队列中当前作业之后的作业时,您将面临阻塞整个服务的风险。你要确保你有比可能阻止工作更多的工人。在大多数情况下,最好使用多个Executor服务,并将从属组的每个作业提交给不同的服务。有几个选项:
为什么在这里需要多线程,如果需要顺序行为,请参见[here][1][1]讨论的主题:那么,除了可调用之外,还有其他方法吗?可调用仅在Java中引入。使用Callable有什么问题吗?