gpt4 book ai didi

java - 从 native 代码访问 java 同步方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:01 24 4
gpt4 key购买 nike

我有一个 java 类,它有一些(私有(private)静态)同步方法,我也想从 native 代码调用这些方法。通过一些示例代码,我的意思变得更加清楚

public class SomeClass {
private static synchronized void method() {
//do something that needs synchronization
}
}

和相关的 native 代码 (C++)

void someFunction(JNIEnv * env) {
jclass someClass = env->findClass("SomeClass");
jmethodID methodId = env->GetStaticMethodID(jclass, "method", "()V");
env->MonitorEnter(jclass); // <--- IS THIS NEEDED/ALLOWED
env->CallStaticVoidMethod(jclass, methodId);
env->MonitorExit(jclass); // <--- IS THIS NEEDED/ALLOWED
}

所以我想知道我是否需要调用 MonitorEnter/MonitorExit,或者方法同步是否已由 SomeClass.method() 上的同步属性强制执行。我对重写代码不太感兴趣。我可以想出一些解决方案来解决这个问题,但我对行为是什么感兴趣,给定一个从 native 代码调用的同步方法。

最佳答案

8.4.3.6 synchronized Methods Java Language Specification 的声明说,将方法声明为同步与在方法中添加同步块(synchronized block)具有相同的效果。

关于java - 从 native 代码访问 java 同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7583531/

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