gpt4 book ai didi

java - 真假 : Locks are to synchronized blocks as gotos are to structured programming?

转载 作者:行者123 更新时间:2023-12-04 06:28:55 27 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .




11年前关闭。




这是一个公平的类比吗?我想我可以想到一些你必须使用锁的场景,但我不确定它们是否有必要。

例如,这是我最近编写的一个循环,用于在线程上等待更新列表。如果这是糟糕的 java,我深表歉意,因为我是本地 linux kernel-ite:

ReentrantLock lock;

...

while(true) {
lock.lock();
int size = queue.size();

if (size == 0) {
try {
lock.unlock();

Thread.sleep(3600000);
continue;
} catch (InterruptedException e) {
lock.lock();
size = queue.size();
if (size == 0) {
lock.unlock();
continue;
}
}
}

VPacket p = queue.getFirst();
lock.unlock();

return p;
}

在哪里 VPacket是我正在编写的特定协议(protocol)的数据包。

当我思考 Collections.synchonizedList class 时,我想到了这个类比。 ,考虑如何在没有类似 C 的技巧的情况下做到这一点。

最佳答案

好吧,同步块(synchronized block)比 ReentrantLock 等类早了很多年;引入该包中的类是为了提供一些比 Java 以前提供的更复杂和更高级别的功能——尽管其中许多功能仅在非常特定的情况下才需要。

但在这种特定情况下,我会说使用同步块(synchronized block)(和等待(N)而不是 sleep (N)!)会更优雅。我理解你的类比,我会说有时它是成立的;当然对于这种普通的情况,使用同步块(synchronized block)就像在 C++ 中使用 RAII 模式——这是确保在需要时清理事情的最清晰方法。

关于java - 真假 : Locks are to synchronized blocks as gotos are to structured programming?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681186/

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