JAVA中的多线程

问题描述 投票:-2回答:2

我在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。

java linux multithreading jna
2个回答
1
投票

不,一般而言,您必须通过synchronized构造来自行管理安全多线程,以保护对共享资源的访问。


0
投票

我得到了正确的答案。通过JAVA在Linux中进行dlopen不会违反RTLD_LOCAL。我明确地通过了同样的方式。有效。

© www.soinside.com 2019 - 2024. All rights reserved.