文档

Java™教程
隐藏目录
饥饿和活锁
指南:基本的Java类
课程:并发
章节:存活性

饥饿和活锁

饥饿和活锁比死锁问题要少见得多,但仍然是每个并发软件设计者可能遇到的问题。

饥饿

饥饿描述了一个线程无法定期访问共享资源并且无法取得进展的情况。当"贪婪"线程长时间地使共享资源不可用时,这种情况就会发生。例如,假设一个对象提供了一个经常需要很长时间才能返回的同步方法。如果一个线程频繁调用该方法,其他需要频繁同步访问相同对象的线程通常会被阻塞。

活锁

一个线程通常会对另一个线程的动作作出反应。如果另一个线程的动作也是对另一个线程动作的响应,那么可能会发生活锁。与死锁类似,活锁的线程无法取得进一步的进展。然而,线程并没有被阻塞 - 它们只是忙于相互响应而无法恢复工作。这就像两个人试图在走廊中相互经过:Alphonse向左移动以让Gaston通过,而Gaston向右移动以让Alphonse通过。看到他们仍然互相阻塞,Alphonse向右移动,而Gaston向左移动。他们仍然互相阻塞,所以...


上一页: 死锁
下一页: 保护的代码块