同步异步&阻塞非阻塞区别
1. 同步&异步
同步与异步:关心的是消息通知机制
如果调用方发起调用后,需要等待这个返回值,调用方主动去等它的返回,那么就是同步
如果调用方发起调用后,不用调用方去主动等它返回或者主动询问它返回,那么就是异步
下面简单列举几个例子
同步
A a = read();
异步
read(()->{
public void onSuccess(){
xxxx
}
})
思考:Future算异步还是同步?
Future<Integer> future = ThreadPoolExecutor.submit(new Task());
int result = future.get();
2. 阻塞&非阻塞
阻塞&非阻塞:关心的是调用者的状态
阻塞:调用者发起调用后,调用者从运行态(Runnable)进入到阻塞态(Blocked),直到返回值准备好返回才切换会运行态
非阻塞:调用者发起调用后,不会进入阻塞态(Blocked),会立刻返回,返回值可以是空值,也可以是其他;应用程序需要自己轮训返回值是否准备好
下面也举几个例子