假设远程class RemoteServer
有两个远程方法method1
和method2
。
是否可以在Java RMI中的服务器的同一线程中运行对这两个方法的远程调用?
众所周知,method1
将首先被召唤。
我已阅读"Thread Usage in Remote Method Invocations" (below)并且没有任何想法。
由RMI运行时调度到远程对象实现的方法可能会也可能不会在单独的线程中执行。 RMI运行时不保证将远程对象调用映射到线程。
答案 0 :(得分:3)
虽然你的问题表明你很有可能找到更好的程序设计,如果你真的需要这样的功能,你可以通过ThreadPoolExecutor
用一个线程实现它。只需将方法method1()
和method2()
包装到两个不同的Callable
中,然后将它们提交到单线程池中。
class Method1Task implements Callable<Void> {
public Void call() throws Exception {
// method 1 body here
return null;
}
}
class Method2Task implements Callable<Void> {
public Void call() throws Exception {
// method 2 body here
return null;
}
}
...
// Create a single-thread pool and use it to submit tasks
private final ExecutorService executor = Executors.newFixedThreadPool(1);
void method1() {
executor.submit(new Method1Task());
}
void method2() {
executor.submit(new Method2Task());
}
如果您需要等待方法完成,请使用Future
返回的submit()
。如果需要返回方法中的值,请更改Void
以获取适当的数据类型。
在Java 8中,它更简单,您不需要Callable
s:
executor.submit(() -> {
// call the method you need here
});