1. 程式人生 > >Java回撥機制的學習(CallBack)

Java回撥機制的學習(CallBack)

深入淺出的理解Java回撥機制(一個有趣的小例子):

http://www.cnblogs.com/heshuchao/p/5376298.html

Java同步呼叫,非同步呼叫,回撥(參考)

https://www.cnblogs.com/xrq730/p/6424471.html

 

總結

Java回撥:

Class A可以完成一個功能,而其他的Class想要用Class A的那個功能並得到處理後的結果(每個Class對得到結果的後續操作不同)

這個時候Class A就可以定義一個回撥介面,並且接收這個回撥介面

其他的類要用Class A的功能的時候只要定義一個內部類實現該介面(對結果的後續操作),再拿著該介面去呼叫A的功能就可以了

Class A在功能執行完畢之後,就會把結果傳給回撥介面的回撥方法中並執行回撥方法

 

P.s.對於簡單的業務邏輯沒必要用回撥,直接用呼叫就行了(呼叫Class A的功能並得到結果,然後自己處理結果)

 

 

同步呼叫

同步呼叫是最基本並且最簡單的一種呼叫方式,類A的方法a()呼叫類B的方法b(),b()執行完畢返回結果給a(),a()方法繼續往下走。這種呼叫方式適用於方法b()執行時間不長的情況,因為b()方法執行時間一長或者直接阻塞的話,a()方法的餘下程式碼是無法執行下去的,這樣會造成整個流程的阻塞。

 

非同步呼叫

非同步呼叫是為了解決同步呼叫可能出現阻塞,導致整個流程卡住而產生的一種呼叫方式。類A的方法方法a()通過新起執行緒的方式呼叫類B的方法b(),程式碼接著直接往下執行,這樣無論方法b()執行時間多久,都不會阻塞住方法a()的執行。但是這種方式,由於方法a()不等待方法b()的執行完成,在方法a()需要方法b()執行結果的情況下(視具體業務而定,有些業務比如啟非同步執行緒發個微信通知、重新整理一個快取這種就沒必要),必須通過一定的方式對方法b()的執行結果進行監聽。在Java中,可以使用Future+Callable的方式做到這一點,具體做法可以參見博主的這篇文章Java多執行緒21:多執行緒下其他元件之CyclicBarrier、Callable、Future和FutureTask