Java并发编程之同步与异步、阻塞与非阻塞

同步与异步

  • 被调用者是否主动告诉调用者结果,针对被调用者而言
  • 左图是同步的情况:客户端向服务器请求数据,在服务器准备数据期间,客户端需要不停的等待,无法做别的事
  • 右图是异步的情况:客户端向服务器请求数据,在服务器准备数据期间,客户端可以做其他的事情,直到服务器返回这个结果
    Java并发编程之同步与异步、阻塞与非阻塞

阻塞与非阻塞

  • 调用者在调用结果返回前,是否还能做别的事,针对调用者而言
  • 线程状态角度:是线程六中状态的其中三种(Block、Waiting、Time_Waiting),就是指线程在阻塞状态下,就不能继续执行了,需要等待其他线程来唤醒
  • 线程发出请求(HTTP)角度:如果是阻塞的,那么发出请求方就什么都干不了只能等待;如果是非阻塞,发出请求方就可以在此期间做别的事
  • 同步阻塞:调用者在被调用者结果返回前一直等待,被调用者不会主动返回结果
  • 异步非阻塞:调用者在结果返回前不用等待,可以做别的事,被调用者主动返回结果