我会尽量把我的问题说清楚。我在类中有一个这样的回调函数,用于从阅读器中检索卡片信息。
public void CallbackFunction(CardContent PresentedCard) {
}
通常,我可以将代码写入回调函数中例如,如果我想打印卡片数据的内容=>这部分不会花很长时间。
但是想象一下,如果我想做一个大的过程,请求很长一段时间,就像我需要在不同的服务器上传输信息那么远=>这可能需要很长时间
所以我理解的是,在这段时间内,如果阅读器上出现了一张新卡,我认为回调在这段时间内不会被唤醒,我必须等待前一个进程结束(将所有数据发送到所有服务器)才能再次检测到一张新卡。
所以我的问题是用回调函数管理这种情况的最佳实践是什么?
感谢使用线程处理长时间运行的回调函数。回调函数可以处理新的卡片事件而不被阻塞。
下面是如何使用Java的Thread类:public void CallbackFunction(CardContent PresentedCard) {
Thread thread = new Thread(() -> {
// long-running process here
sendDataToServer(PresentedCard);
});
thread.start();
}
在本例中,回调函数可以在向服务器传输数据的同时处理新卡事件。
Executor、Future和CompletableFuture提供了额外的线程管理选项。
回调函数可能会将卡片信息添加到消息队列中,一个单独的线程将处理该队列并将数据传输到服务器。如有必要,此方法可以保留事件顺序。
在长时间运行的进程中处理问题和异常也很重要,如果程序关闭或进程花费太长时间,适当地结束或中断线程。