类似的问题:
我有一个对象,我想向库客户端(尤其是脚本客户端)公开一个方法,例如:
interface MyNiceInterface
{
public Baz doSomethingAndBlock(Foo fooArg, Bar barArg);
public Future<Baz> doSomething(Foo fooArg, Bar barArg);
// doSomethingAndBlock is the straightforward way;
// doSomething has more control but deals with
// a Future and that might be too much hassle for
// scripting clients
}
但我可用的原始“东西”是一组事件驱动的类:
interface BazComputationSink
{
public void onBazResult(Baz result);
}
class ImplementingThing
{
public void doSomethingAsync(Foo fooArg, Bar barArg, BazComputationSink sink);
}
在 ImplementingThing 接受输入,做一些神秘的事情,比如在任务队列中排队,然后当结果发生时,sink.onBazResult()
在一个线程上被调用,该线程可能与 ImplementingThing.doSomethingAsync() 被调用的线程可能相同,也可能不同。
有没有一种方法可以使用我拥有的事件驱动函数以及并发原语来实现 MyNiceInterface 以便脚本客户端可以愉快地等待阻塞线程?
编辑:我可以为此使用FutureTask吗?