天天看点

同步、异步、阻塞、非阻塞之间的区别

  1. 阻塞是线程的一个状态,线程发起任务请求然后一直等,直到到任务完成再把结果返回,如果任务未完成当前线程会被挂起。
  2. 非阻塞是发起任务请求之后先马上返回去做别的事,然后再时不时主动查看任务请求是否被完成。(轮询)
  3. 同步是指两个任务(线程)之间存在竞争或者因果关系,例如一个线程占用了一个对象,其他线程如果要访问此对象,则需要等之前的线程操作完成返回,相关概念有同步方法、同步代码块、对象锁;同步可能是阻塞的也可能是非阻塞的,当被竞争的对象已被其他线程占用,当前线程如果表现为挂起等待,则是阻塞调用;若当前线程通过轮询(乐观锁)不断查看竞争对象是否已经释放,则是非阻塞调用。
  4. 异步是如果完成任务时,遇到一个耗时操作(或者对象已经被别的线程占用了),不等待而是去做其他事情,也不主动查看是否完成,而是等耗时操作完成,发通知再叫线程回来处理结果,常见的例子就是 Ajax ,相关概念有回调函数等。

继续阅读