JAVA上的多线程

时间:2018-09-12 14:34:57

标签: java linux multithreading jna

我在JVM多线程环境中遇到内存崩溃。在每个线程运行环境中,我都在加载C ++共享库的实例。 (例如说exm1.so,exm2.so等)。

首先让我告诉您C ++共享库不是线程安全的。因此,我们正在使用C ++共享库的一个实例加载JVM创建的每个线程。 Java代码:

import com.sun.jna.Native;

Thread 1:

run{
  x libraryInstance = Native.loadLibrary(exm1.so, x.class);
  x. mymethod();
}

Thread 2:

run{
  x libraryInstance = Native.loadLibrary(exm2.so, x.class);
  x. mymethod();
}

我的问题是此.so文件将存储在哪个内存中,并且JVM是否以线程安全的方式管理每个线程内存?

在每个.so文件中都有C ++ malloc函数调用。 JVM有效地管理此内存ptr。

2 个答案:

答案 0 :(得分:1)

不,通常,您必须通过synchronized构造自己管理安全的多线程,以保护对共享资源的访问。

答案 1 :(得分:0)

我得到了正确的答案。通过JAVA在Linux中的dlopen未默认设置为RTLD_LOCAL。我已经通过明确相同。有效。