??回调(Callback)是一种常见的编程模式,它允许一个对象在某个事件发生或某个任务完成后,通知另一个对象。在 Java 中,回调通常以接口的形式实现,在某个事件发生时调用接口中定义的方法。
??在异步编程中,回调通常用于处理异步操作的结果。当一个异步操作完成时,可以调用预先注册的回调函数来处理结果或通知完成情况。
public interface MyCallback {
void onSuccess(String result);
void onFailure(Exception e);
}
@Component
@Slf4j
public class AsyncTask {
//线程池对象
@Resource(name = "taskExecutor")
private ThreadPoolTaskExecutor taskExecutor;
public void doTask() {
taskExecutor.execute(() -> {
// 模拟耗时操作
try {
System.out.println("The task begins");
// 模拟任务执行
Thread.sleep(5000);
// 模拟任务成功完成
//Integer a = 1 / 0;
String result = "Task completed successfully.";
notifyCallback(result, null); // 通知成功回调
} catch (Exception e) {
notifyCallback(null, e); // 通知失败回调
e.printStackTrace();
}
});
}
// 通知回调方法的示例
public static void notifyCallback(String result, Exception e) {
MyCallback callback = new MyCallback() {
@Override
public void onSuccess(String result) {
System.out.println("Task result: " + result);
// 在这里处理任务成功的逻辑
}
@Override
public void onFailure(Exception e) {
System.out.println("Task failed with exception: " + e.getMessage());
// 在这里处理任务失败的逻辑
}
};
if (e != null) {
callback.onFailure(e);
} else {
callback.onSuccess(result);
}
}
}
@RestController
public class DemoController {
@Autowired
public AsyncTask asyncDemo;
@GetMapping("/async")
public void getResult() {
asyncDemo.doTask();
}
}