在Java中缓存JNI变量

在Java中缓存JNI变量,java,caching,java-native-interface,Java,Caching,Java Native Interface,我正在创建一个Java服务器代码,需要调用由C编写的本机方法。C文件将向Java返回值。现在我需要缓存这些值,并使其成为线程安全的,因为服务器代码支持多线程。静态变量对我不起作用,因为它的值由线程共享。那么,我如何才能做到这一点呢?谢谢。使用synchronized前缀声明本机方法,以确保JNI调用是线程安全的。出于缓存的目的,您可以在JNI中使用全局引用或其他通用缓存技术来缓存该值。那么为什么不在Java端缓存并添加线程安全防护(例如同步)呢?JNI到底是如何适应的?不要缓存它。将它保存在最常

我正在创建一个Java服务器代码,需要调用由C编写的本机方法。C文件将向Java返回值。现在我需要缓存这些值,并使其成为线程安全的,因为服务器代码支持多线程。静态变量对我不起作用,因为它的值由线程共享。那么,我如何才能做到这一点呢?谢谢。

使用
synchronized
前缀声明本机方法,以确保JNI调用是线程安全的。出于缓存的目的,您可以在JNI中使用全局引用或其他通用缓存技术来缓存该值。

那么为什么不在Java端缓存并添加线程安全防护(例如同步)呢?JNI到底是如何适应的?不要缓存它。将它保存在最常访问的地方:Java代码或JNI代码中。不是两者都有。并使用JNI从保存到另一层的层中获取值。谢谢alijandro。您能列出JNI中的一些全局参考或其他通用缓存技术吗?我不熟悉这个领域。@KevinOuyang描述了方法/字段id和类的全局引用缓存,但您可以在数据缓存中使用这种技术。