Java并发编程之同步与异步、阻塞与非阻塞
同步与异步
- 被调用者是否主动告诉调用者结果,针对被调用者而言
- 左图是同步的情况:客户端向服务器请求数据,在服务器准备数据期间,客户端需要不停的等待,无法做别的事
- 右图是异步的情况:客户端向服务器请求数据,在服务器准备数据期间,客户端可以做其他的事情,直到服务器返回这个结果
阻塞与非阻塞
- 调用者在调用结果返回前,是否还能做别的事,针对调用者而言
- 线程状态角度:是线程六中状态的其中三种(Block、Waiting、Time_Waiting),就是指线程在阻塞状态下,就不能继续执行了,需要等待其他线程来唤醒
- 线程发出请求(HTTP)角度:如果是阻塞的,那么发出请求方就什么都干不了只能等待;如果是非阻塞,发出请求方就可以在此期间做别的事
- 同步阻塞:调用者在被调用者结果返回前一直等待,被调用者不会主动返回结果
- 异步非阻塞:调用者在结果返回前不用等待,可以做别的事,被调用者主动返回结果