Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中实现异步方法调用?_Java_Asynchronous - Fatal编程技术网

如何在Java中实现异步方法调用?

如何在Java中实现异步方法调用?,java,asynchronous,Java,Asynchronous,除了线程和执行器之外,是否还有其他方法可以在java中实现异步方法调用?如果它是由Executor实现的,它会引入延迟吗?在Java中使用线程执行器只是将线程管理封装在更好的容器中的一种方法 这可能会导致延迟。如果线程正忙于处理另一个任务,则会有延迟。否则,延迟是基于操作系统上下文切换机制的,该机制通常具有很高的响应性(而在多核体系结构和基于超线程或类似技术的体系结构上可能会有所不同) 您可以使用DynamicProxy(核心java功能)在调用者和被调用者之间引入一个层。在代理中,方法调用表示

除了线程和执行器之外,是否还有其他方法可以在java中实现异步方法调用?如果它是由Executor实现的,它会引入延迟吗?

在Java中使用
线程<代码>执行器
只是将线程管理封装在更好的容器中的一种方法


这可能会导致延迟。如果线程正忙于处理另一个任务,则会有延迟。否则,延迟是基于操作系统上下文切换机制的,该机制通常具有很高的响应性(而在多核体系结构和基于超线程或类似技术的体系结构上可能会有所不同)

您可以使用DynamicProxy(核心java功能)在调用者和被调用者之间引入一个层。在代理中,方法调用表示为对象。立即返回并在单独的线程中调用该方法。问题仍然是如何将值返回给调用者。您是否计划稍后返回要返回的返回值?这可以使用回调方法解决。

您可以传入一个实现回调的类

new A(instanceOfB);

someMethodOfA() {
    doSomething();
    instanceOfB.callback();
}

另一种选择是使用消息传递(JMS)来实现此类行为。

同样在Java EE6会话bean中,您可以使用@Asynchronous来进行异步方法调用。

您的意思是说执行器中引入的延迟取决于线程池和工作线程的可用性。您添加的所有内容都会引入延迟。不,我不想返回任何内容。