java 非阻塞算法

Posted 泥古拉斯赵四

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 非阻塞算法相关的知识,希望对你有一定的参考价值。

什么是非阻塞算法呢?

 

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

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

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

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

以上是关于java 非阻塞算法的主要内容,如果未能解决你的问题,请参考以下文章

java 非阻塞算法

《Java并发编程实战》笔记-非阻塞算法

Java 理论与实践: 非阻塞算法简介

java并发编程11.原子变量与非阻塞同步机制

java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列

java 非阻塞算法实现基础:unsafe类介绍