java 非阻塞算法
Posted 泥古拉斯赵四
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 非阻塞算法相关的知识,希望对你有一定的参考价值。
什么是非阻塞算法呢?
在基于锁的算法中可能会发生各种活跃性故障。如果线程在持有锁时由于阻塞IO,内存页缺失或其他延迟而导致推迟执行,那么很可能所有线程都不能继续执行下去。
如果在算法中,一个线程的失败或者挂起不会导致其他线程也失败或挂起,那么这种算法就被称为非阻塞算法。如果在算法的每个步骤中都存在某个线程能够执行下去,那么这种算法也被称为无锁(Lock-free)算法。
如果在算法中仅将CAS用于协调线程之间的操作,并且能正确的实现,那么它既是一种无阻塞算法,也是一种无锁算法。无竞争的CAS通常都能执行成功,并且如果有多个线程竞争同一个CAS,那么总会有一个线程在竞争中胜出并执行下去。在非阻塞算法中通常不会出现死锁和优先级反转问题(但可能会出现饥饿和活锁问题,因为在算法中会反复地重试)。
在许多常见的数据结构中都可以使用非阻塞算法,包括栈,队列,优先队列以及散列表等。
以上是关于java 非阻塞算法的主要内容,如果未能解决你的问题,请参考以下文章