2012-02-28 22 views
2

有沒有辦法在java中實現Async方法調用除了線程和Executor?如果由Executor執行,是否會引入任何延遲?如何在Java中實現異步方法調用?

+0

您添加的所有內容都會導致延遲。 – 2012-02-28 17:00:35

回答

1

使用Threads在Java中的方式。 Executors只是將線程管理包裝在更好的容器中的一種方法。

可能引入延遲。如果線程忙於處理其他任務,則會有延遲。否則,延遲基於OS上下文切換機制,該機制通常相當敏感(這反過來可能在多核體系結構以及基於超線程或類似技術的體系結構上變化)。

+0

你的意思是說執行程序中引入的延遲取決於線程池和工作線程的可用性 – neo 2012-02-28 16:54:09

+0

@neo,絕對 – 2012-02-28 16:55:31

0

您可以使用DynamicProxy(核心Java功能)在調用者和被調用者之間引入一個圖層。在代理中,您將方法調用表示爲對象。立即返回並在單獨的線程中調用該方法。一個問題仍然是如何將值返回給調用者。您是否計劃在稍後返回您想返回的值?這可以使用回調方法來解決。

+0

不,我不想返回任何東西。 – neo 2012-02-28 17:00:57

-1

您可以傳入實現回調的類。

new A(instanceOfB); 

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

另一個選擇是使用消息傳遞(JMS)來實現此類行爲。
也在Java EE6會話Bean中,您可以使用@Asynchronous來進行方法調用Async。