java回調機制

異步調用:

類A的一個方法methodA()開啓了一個新的線程調用了類B的方法methodB(),程序繼續執行。無論methodB()執行多久都不會阻塞methodA()。如果想要methodB()方法的執行結果 則可以用Future+Callable方式做到這一點。 還有一種方法也可以就是回調

回調:


思想:

methodA()裏調用methodB()。 methodB()執行結束後 調用A的callable()方法

模擬場景:

老師問學生問題 學生思考之後回答

首先需要一個回調接口 Callback   學生接口Student  學生類fitch(繼承student) 教師類Teacher(繼承Callback)

Callback接口裏是學生想要告訴老師的答案

public interface Callback {
	void tellAnswer(int answer);
}

學生接口:解決老師問的問題

public interface Student {
	void resolve(Callback callback);
}

老師類:

public class Teacher implements Callback{
	private Student stu;
	public Teacher(Student student){
		this.stu=student;
	}
	/**
	 * 向學生提問
	 */
	public void Ask(){
		stu.resolve(this);//注意這裏傳遞的是this
	}
	/**
	 * 答案
	 */
	public void tellAnswer(int answer){
		System.out.println("答案是"+answer);
	}
}

名叫fitch的學生

public class fitch implements Student{

	public void resolve(Callback callback) {
		try{
			//學生的解題思路
		}catch(Exception e){
			
		}
		//回調 告訴老師作業寫了多久
		callback.tellAnswer(3);
	}

}

測試:

public class CallbackTest {
	public static void main(String[] args){
		Student stu=new fitch();
		Teacher te=new Teacher(stu);
		te.Ask();
	}
}

結果:

答案是3

可以看出 老師調用學生的resolve()方法向學生提問,而學生解決問題後 調用老師的回調方法tellAnswer()

這叫雙向調用

 回調的核心是調用方(老師) 將自身 (this)傳遞給 被調用方(學生)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章