gpt4 book ai didi

java - 线程活锁疑问

转载 作者:行者123 更新时间:2023-11-30 11:57:59 25 4
gpt4 key购买 nike

现场http://download-llnw.oracle.com/javase/tutorial/essential/concurrency/starvelive.html有一个活锁的概念,首先说这里的线程没有被阻塞,然后说线程被阻塞......“他们仍然互相阻塞”所以我不太明白......如果他们被阻止似乎陷入僵局......

如果能够模拟 Java 网站上报告的 Alphonse 和 Gaston 示例,任何人都可以向我提交一个更好的活锁情况的简单 Java 代码吗?

最佳答案

发生死锁时,有两个或多个线程:每个线程持有一个锁,需要获取另一个锁。每个线程都睡在另一个线程持有的锁上。因为他们睡着了,所以他们“死了”——不执行任何代码,而且他们永远不会。

使用活锁时,两个或多个线程处于 Activity 状态并正在执行代码,但它们无法继续其代码中过去的条件,因为它们太忙于响应来自活锁中其他线程的事件。

此时我的 Java 已经严重生锈了,所以让我们来一个希望简单的描述:

两个线程,AB,需要获取锁 12 才能执行某些操作操作(吃三明治):

Thread A tries this:

Acquire lock 1
if try_lock(2) == success
eat the sandwich
else
drop 1
sleep a bit
go back to start


Thread B tries this:

Acquire lock 2
if try_lock(1) == success
eat the sandwich
else
drop 2
sleep a bit
go back to start

如果这两个线程总是交替执行指令,那么任何一个都不会吃东西三明治:他们都将把所有的时间都花在获取、测试和放弃锁定,但他们永远无法取得进展。

关于java - 线程活锁疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3413759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com