如何在队列中调度函数调用执行?

时间:2013-12-23 11:29:40

标签: java

我有一个界面

interface Methods {
    void MethodX(int X);
    void MethodY(int Y);
    // ...
}

接口实现必须安排对阻塞队列中的接口方法的调用(以便按顺序执行调用)。有没有简单的方法可以做到这一点?

Something.post(...);

Where ...是一个围绕MethodZ的包装调用。

对接口的调用是非阻塞的(它是一个AIDL接口),但内部的每个下一个调用都应该在前一个调用完成之前执行。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你可以尝试类似的事情:

class MethodZExecutor implements Callable<Void> {

  private final Methods method;
  private int argument;

  public MethodZExecutor(Methods method, int argument) {
    this.method = method;
    this.argument = argument;
  }

  @Override
  public Void call() {
    method.MethodZ(argument);
    return null;
  }
}

然后创建阻止队列以保存Callable个对象。从此队列中取消项目并在其上调用call()

注意:这可能都是使用匿名内部类发生的,具体取决于您的用例:

someQueue.post(new Callable<Void>() {
  @Override
  public Void call() {
    foo.MethodZ(someArgument);
    return null;
  }
});

答案 1 :(得分:0)

您可以将函数对象放入队列并直接调用它们。唯一的限制是将数据传递给函数。

您可以从Wikipedia检查Java中的函数对象。另一种选择是使用lambda表达式创建具有要在其中调用的函数的匿名类对象,并将此对象推入队列。检查here

处的lambda表达式