Java 为什么单线程程序中不会发生活动性故障?

Java 为什么单线程程序中不会发生活动性故障?,java,multithreading,deadlock,livelock,Java,Multithreading,Deadlock,Livelock,我一直在实践中阅读Java并发。我看到一份声明说: 单线程程序中不会出现死锁、活锁或饥饿等活动性故障 然而,让我们看一个例子。如果单线程应用程序在呈现视图之前发出I/O请求,并且I/O请求在概念上/理论上需要无限时间。单线程应用程序确实向前推进并阻止了自己,最终“什么好事都没发生” 我的问题是,这仅仅是单线程程序中可能发生活动性失败的证明吗?或者我可能错了,我明白你的意思。让我们看看你的例子。因为这需要无限的时间。所以,即使有数千条线索,对你的思想来说,也是活力的失败。及 活跃性是并发应用程序及

我一直在实践中阅读Java并发。我看到一份声明说:

单线程程序中不会出现死锁、活锁或饥饿等活动性故障

然而,让我们看一个例子。如果单线程应用程序在呈现视图之前发出I/O请求,并且I/O请求在概念上/理论上需要无限时间。单线程应用程序确实向前推进并阻止了自己,最终“什么好事都没发生”


我的问题是,这仅仅是单线程程序中可能发生活动性失败的证明吗?或者我可能错了,我明白你的意思。让我们看看你的例子。因为这需要无限的时间。所以,即使有数千条线索,对你的思想来说,也是活力的失败。及

活跃性是并发应用程序及时执行的能力 态度


所以这是不可能的。

请看:“死锁、活锁或饥饿等活度失败不会发生……”与“活度失败不会发生……”不是一回事。我想你误解了“活度”这个词,它是活度锁和活度的第一部分。这两个词的意思不一样。Livelock指的是一种特定类型的bug,只有在有两个线程的情况下才会发生(可以选择在不同的程序中进行协作),liveness指的是没有一类非常大的bug,包括没有
,而(true){}
“liveness failure”是一个艺术术语。单线程程序中的缺陷可能会导致程序停止运行,但我们不称之为“活动性失败”。我们称之为“挂起”或“无限循环”等。当我们谈论多线程之间的病态交互时,我们只称之为“活动性失败”。