這篇文章主要講解了“什么是Java回調機制”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“什么是Java回調機制”吧!
回調分為同步回調和異步回調, 假如以買彩票的場景來模擬, 我買彩票, 調用彩票網,給我返回的結果確定是否中獎,同步回調就是,我買了彩票之后, 需要等待彩票網給我返回的結果, 這個時候我不能做其他事情, 我必須等待這個結果, 這就叫同步回調, 同步, 就意味著等待, 我不能去做其他事情, 必須等待, 異步回調就是, 我買了彩票之后, 可以去做其他事情, 然后當彩票網有了結果和消息, 再給我返回消息, 其中最明顯的方式就是在得到彩票結果的函數之中, 添加一個其他的方法, 如果我的其他方法可以立即執行, 那么就是異步的(給出是否中獎需要花費很長的時間), 而在測試函數之中, 前后兩個, 那是發生在測試函數的線程之中的, 肯定是一前一后按照次序的, 在這個地方不是顯示同步異步的地點.
即我調用你的函數,你調用我的函數。通俗講是類A的函數a()調用類B的函數b(),當類B的b()函數的執行時又去調用類A里的函數a1()。是一種雙向的調用方式。一般情況下,回調分兩種,分別是同步回調和異步回調。
一種雙向的調用模式,被調用方在函數被調用時也會調用對方的函數,中間不做其他操作。
例如:其中CalImp屬于類A,CalLogin屬于類B。
public interface ICallBack { public void calResult(int a,int b,int result); } public class CalImpl implements ICallBack{ private int a; private int b; public CalImpl(int a, int b){ this.a = a; this.b = b; } public void calculate(){ new CalLogic().calculateLogic(a,b,this); } @Override public void calResult(int a, int b, int result) { //控制臺輸出 System.out.println(a + " + " + b + " = " + result); } } public class CalLogic { public void calculateLogic(int a,int b,ICallBack iCallBack){ int result = a + b; System.out.println("被調用線程執行完成..."); iCallBack.calResult(a, b, result); } } public class TestCallBack { public static void main(String[] args) { int a = 22; int b = 33; //實例化計算器Calculator類 CalImpl calculator = new CalImpl(a,b); //調用計算器calculator的計算函數 calculator.calculate(); System.out.println("主線程執行完成..."); //22 + 33 = 55 //主線程執行完成... } }
一種類似消息或事件的機制。被調用方函數在收到某種訊息或發生某種事件(完成某個操作)時,才去調用對方的函數,即通過異步消息進行通知。
簡單來說,類A的a()函數調用類B的b()函數,但是b()函數很耗時,不確定什么時候執行完畢,如果是同步調用的話會等b()執行完成后才往下執行回調類A中的函數,如果是異步回調的話調用了b()函數,雖然b()函數沒有執行完,但a類仍然繼續往下執行,為了完成這點,就需要另開一個線程了。
例如:其中CalImp屬于類A,CalLogin屬于類B。類A中新開了一個線程執行。
輸出主線程執行完成...明明是放在代碼的最后執行的,結果卻先執行輸出了,這是因為開了另一個線程。
異步回調和同步回調最大的不同就是:異步回調里新建了一個子線程。
異步回調常見于請求服務器數據,當取到數據時,會進行回調。
感謝各位的閱讀,以上就是“什么是Java回調機制”的內容了,經過本文的學習后,相信大家對什么是Java回調機制這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。