gpt4 book ai didi

java - 如何在 Java 中有条件地锁定?

转载 作者:行者123 更新时间:2023-11-29 09:41:36 25 4
gpt4 key购买 nike

我一直在使用 Java 的 synchronized block 来使我的部分代码线程安全。我正在将一个数据结构移植到通常可以使用 synchronized block 的 java,但我并不总是知道如何以典型的 Java 方式使用它们。

这是一个场景的例子:

myMethod (Bool useLock)
{
if (useLock)
{
//locks the following section of code until unlocked.
lockObject.lock();
}

//do more stuff....

if (useLock)
{
//unlocks exclusive control of code.
lockObject.unlock();
}
}

我如何在 Java 中执行与此等效的操作?在这段代码中,有时我想锁定,有时我不想,但我想对此保持聪明,而不必编写相同代码的两个版本。除了使用 synchronized block 之外,Java 中是否还有其他锁定方式?

最佳答案

您可以使用锁定对象,ReentrantLock特别应该做的工作。 http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html

或者您仍然可以使用 synchronized block 来解决问题。您问题中的代码如下所示:

myMethod (Bool useLock) {
if (useLock) {
synchronized (this) {
criticalSection();
}
} else {
criticalSection();
}
}

criticalSection() {
//do more stuff....
}

或者如果你想保证类的不同实例之间的互斥,你应该使用 this 之外的其他监视器对象。例如 TheClassName.class 或该类的其他显式定义的静态变量。

关于java - 如何在 Java 中有条件地锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12534364/

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