1.什么是异步调用
异步调用简单理解,就是不阻塞主线程,再开辟另一个线程异步执行
main{
//前置语句
costTime();
//后置语句
}
在上述代码中,主线程按顺序,需要依次执行前置语句,调用costTime函数,该函数耗时较长,以及后置语句。在执行costtime函数时,主线程处于阻塞状态。当后置语句和costTime函数执行无直接关联时,他们可以一起执行,这样的执行方式,就是对costTime的异步调用,此时主线程处于非阻塞状态。
2.简单实现异步调用
最简单的方式,就是new Thread,然后把costTime丢进去
main{
//前置语句
new Thread(new Runnable(){
@Override
public void run(){
costTime();
}
}).start();
//后置语句
}
这种实现方式的缺点是:
- 每次执行都需要new Thread,性能差
- 线程不易于管理,可能无限的新建线程,占用过多系统资源导致OOM
- 功能不完善,比如不可定时执行
解决以上问题,可用线程池
3.线程池
线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资