什么时候要用到回调呢?在笔者的工作场景中:调用第三方的API发推送,耗时需要200ms-500ms作用(网路问题),调用对方API后,会返回一个调用结果给你,我们利用这个回调结果进行数据的更新
一个简单的回调helloworld
- 回调接口
public interface CallBackInterface {
/**
* 回调接口返回东西
* @param rtResult
*/
void reSomething(RtResult rtResult);
}
- Handler
public class ToDoHandler {
private static final Logger log = LoggerFactory.getLogger(ToDoHandler.class);
public void handleSomething(NeedProcess process, CallBackInterface callBackInterface) {
String name = process.getName();
log.info("handler 处理是事情");
RtResult rtResult = new RtResult(name);
callBackInterface.reSomething(rtResult);
};
}
- 客户端
public class MyClient {
private static final Logger log = LoggerFactory.getLogger(MyClient.class);
public static ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 2, 1000, TimeUnit.MINUTES, new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardPolicy());
public static void main(String[] args) {
NeedProcess needProcess = new NeedProcess();
needProcess.setName("Lucy");
executor.execute(() -> dos(needProcess));
}
public static void dos(NeedProcess needProcess) {
ToDoHandler handler = new ToDoHandler();
handler.handleSomething(needProcess, new CallBackInterface() {
@Override
public void reSomething(RtResult rtResult) {
log.info("回调处理事情" + rtResult.getResult());
}
});
}
}
- 执行结果
[pool-1-thread-1] INFO com.hx.learn.async.realasync.ToDoHandler - handler 处理是事情
[pool-1-thread-1] INFO com.hx.learn.async.realasync.MyClient - 回调处理事情Lucy
主要逻辑
- 写一个处理器,回调对象调用回调的抽象处理方法
- 客户端调用处理器的处理方法,传入具体的回调方法








网友评论