首先开始问一个问题
Java中实现多线程有几种方法?
- 继承Thread类
- 实现 Runnable 接口
- 实现Callable接口
- 线程池
当然还有其他方法 这是最常用的四种
我们先整个 简单的异步任务
1】新建service包
Thread.sleep(5000); 阻塞线程,休眠5秒
/**
*
* 模拟业务
* @author Charlotte
*/
@Service
public class AsyncService {
public void hello(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据正在处理中.......");
}
}
2】创建Controller实现类、
/**
* @author Charlotte
*/
@RestController
public class AsyncController {
@Autowired
private AsyncService asyncService;
@RequestMapping("/hello")
public String hello (){
// 调用 service(业务层的方法) 停止三秒
asyncService.hello();
return "Hello Spring Boot";
}
}
3】运行启动类 你就会发现 页面会转圈,会给用户非常不好的体验,傻傻等5秒? 不现实
这时候我们会想到线程池,但是消耗太大。
然而SpringBoot 给我们提供了接口
我们只需要给启动类和 业务类 标注上就能完成异步任务的处理
@EnableAsync @Async
这个时候 在运行 就发先 控制台在处理休眠5秒 而网页正常显示。