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)传递给 被调用方(学生)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值