java 非阻塞算法

什么是非阻塞算法呢?

  在基于锁的算法中可能会发生各种活跃性故障。如果线程在持有锁时由于阻塞IO,内存页缺失或其他延迟而导致推迟执行,那么很可能所有线程都不能继续执行下去。

如果在算法中,一个线程的失败或者挂起不会导致其他线程也失败或挂起,那么这种算法就被称为非阻塞算法。如果在算法的每个步骤中都存在某个线程能够执行下去,那么这种算法也被称为无锁(Lock-free)算法。

如果在算法中仅将CAS用于协调线程之间的操作,并且能正确的实现,那么它既是一种无阻塞算法,也是一种无锁算法。无竞争的CAS通常都能执行成功,并且如果有多个线程竞争同一个CAS,那么总会有一个线程在竞争中胜出并执行下去。在非阻塞算法中通常不会出现死锁和优先级反转问题(但可能会出现饥饿和活锁问题,因为在算法中会反复地重试)。

在许多常见的数据结构中都可以使用非阻塞算法,包括栈,队列,优先队列以及散列表等。

原文地址:https://www.cnblogs.com/liumy/p/11938789.html