首页 > 解决方案 > 使用可调用结果而不阻塞的方法

问题描述

我有一个类A,它从侦听器接收不同的独立任务(所有这些都扩展了一个B实现 Callable 的抽象类),并为每个任务分配一个线程。我想知道是否存在能够使用结果的模式在不阻塞类线程的情况下执行这些任务,A例如使用submit()with时会发生什么Future.get()

我正在寻找的结果可以通过将假设的消费者代码附加到任务来完成;但是,在可预见的将来,我希望执行的代码将是相同的,并且随着我执行更多的任务,我的猴脑很可能会忘记添加很多代码。

我目前最好的潜在解决方案是让类B实现Runnable,将消费者代码run()和任务代码放入另一个方法中,并通过其构造函数将参数传递给任务,然后将它们保存为类变量以在调用时使用。然而,这种模式需要额外的构造函数,以及一些只需要是局部变量的类变量。此外,使用这种方法,我在复制任务时遇到了其他问题,例如 NoSuchMethod 异常(我正在使用.getClass().getConstructor(sth.class, sthelse.class).newInstance(sth, sthelse)),即使我创建了构造函数。

所以我想知道是否还有其他选择。

标签: javaconcurrency

解决方案


推荐阅读