java 中 回调机制解读

模块间的调用:

在一个应用系统中,无论使用何种语言,必然存在模块之间的调用,调用方式存在以下几种:

1、同步调用

同步调用是最基本并且最简单的一种调用方式,类A的方法a() 调用类B 的b() ,一直等待b() 方法执行完,a() 才可以继续执行下去,这种调用方式适合方法b() 执行时间不长的情况 , 如果时间过长,a() 方法将一直阻塞等待,导致余下代码无法执行;

2、异步调用

异步调用是为了解决同步调用可能出现的阻塞问题,类A的方法 a() 通过新启线程的方式调用 类B 的b() 方法,代码接着往下走,无论b() 执行多长时间都不会阻塞a() 方法。但是这种方式有个问题,如果a() 方法需要b() 方法的运行结果,怎么办?

必须通过一定的方式对方法b() 的执行结果进行监听。

在java 中使用Future + Callable 的方式做到这一点。

3、回调

 回调的思想:

  • 类A的a() 方法调用类B 的b() 方法;
  • 类B 的 b() 方法执行完毕主动调用类A 的 callback() 方法;

代码示例:

模拟一个老师回答学生问题的现象;

首先,需要定义一个回调接口:

package nc.demo;

public interface Callback {

	/**
	  * 回调接口,原文出处http://www.cnblogs.com/xrq730/p/6424471.html
	  */
	public void tellAnswer(int answer);
	
	
	public void tellAnswer(String answer);
}

此接口需要让A来实现,因为此接口包含B执行完要回调的方法。

其次,定义老师的接口,里面包含老师要执行的方法;

package nc.demo;

public interface TeacherInter extends Callback {

	public void askQusetion();
	
}

第三、 定义具体的老师,老师提问问题,学生回答问题

package nc.demo;

public class YuTeacher implements TeacherInter {

	private Student student;
	
	
	public YuTeacher(Student student) {
		super();
		this.student = student;
	}

	@Override
	public void tellAnswer(int answer) {

	}

	@Override
	public void askQusetion() {

		student.resolveQuestion(this);
	}

	@Override
	public void tellAnswer(String answer) {
		System.out.println(answer);
	}


}

第四、定义学生接口

package nc.demo;

public interface Student {

	public void resolveQuestion(Callback callback);

}

第五、学生实现类

package nc.demo;

public class Tom implements Student {

	@Override
	public void resolveQuestion(Callback callback) {

		
		try {
			Thread.sleep(3000);
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		callback.tellAnswer(3);
		
	}

}

总结起来,回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后告诉回调方它想要知道的信息。回调是一种思想、是一种机制,至于具体如何实现,如何通过代码将回调实现得优雅、实现得可扩展性比较高,一看开发者的个人水平,二看开发者对业务的理解程度。

内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值