当前位置: 首页 > 知识库问答 >
问题:

本机多线程和JNI

谷光誉
2023-03-14

我有一个Android应用程序,它由一些本机线程(未连接到JVM)组成,需要能够调用Java对象的方法。

我打算这样做的方式是创建一个JNI函数,我从相关的Java对象调用它,它允许我在静态本机数据结构中获取和缓存所需的java对象方法ID、JNIEnv和对象引用,以便我的本机线程可以(线程安全地)访问所需的方法(例如,使用(*env)-

我不相信这种方法会起作用,因为我读到JNIEnv指针不能在线程之间共享,并且只有连接到JVM的线程才能做这种事情......

这是一个可行的方法吗?

共有1个答案

蒋昊天
2023-03-14
  1. 在JNI_OnLoad中,缓存JavaVM*。这是唯一跨线程持久有效的东西
 类似资料:
  • 问题内容: 绿色线程和本机线程有什么区别? 为什么将其命名为绿色和原生? 我是编程世界的新手。我喜欢学习Java。在经历Java线程面试问题时,我发现了这一点。我听说过线程,但是没有听说过这些绿色线程和本地线程。我对绿色线程和本机线程感到困惑,但不清楚。 在这种情况下,线程被称为绿色线程还是本地线程?(我的意思是在编程中) 问题答案: 绿色线程和本机线程有什么区别? 绿色线程由虚拟机调度。 本机线

  • 问题内容: 我知道jvm本身就是将Java可执行文件的字节码转换为本地机器代码的应用程序,但是当使用本地线程时,我有一些我似乎无法回答的问题。 是否每个线程都会创建自己的jvm实例来处理其特定执行? 如果不是,那么jvm是否必须有某种方式来调度它接下来将处理的线程,如果是的话,由于一次只能运行一个线程,这是否会使java的多线程性质变得没有用? 问题答案: 是否每个线程都创建自己的JVM实例以处理

  • 下面的代码应该从用户那里获取两个整数(每个输入一个线程),将它们相加(使用第三个线程)并打印总和。但是程序在第一个线程之后终止。 它给出的输出:

  • 前面我们介绍过Chromium是基于多进程模型的架构设计,那么各个进程内的情况呢?事实是每个进程都有很多的线程,特别是browser进程,因而它也基于多线程模型的。介绍多线程机制之前,先来看一下残酷的现实吧,下面是各个进程的线程信息情况(基于Linux平台,其它平台的可能略有不同),相信保证让你头大。是的,你需要泡杯茶,然后静下心来了解一下它们: 为什么这么多的线程呢?Chromium的官方说法告

  • 多任务是一个操作系统可以同时执行多个程序的能力。基本上,操作系统使用一个硬件时钟为同时执行的每个程序配置「时间片段」。如果时间片段够小,并且机器也没有由于太多的程序而超出负荷时,那么在使用者看来,所有的这些程序似乎在同时执行着。 多任务并不是什么新的东西。在大型计算机上,多任务是必然的。这些大型主机通常有几十甚至几百个终端机和它连结,而每个终端机使用者都应该感觉到他或者她独占了整个计算机。另外,大

  • 问题内容: 以下程序与此处描述的程序基本相同。当我使用两个线程(NTHREADS== 2)运行并编译程序时,得到以下运行时间: 当仅使用一个线程(NTHREADS == 1)运行时,即使仅使用一个内核,运行时间也会明显缩短。 我的系统是双核的,我知道random_r是线程安全的,并且我很确定它是非阻塞的。如果在没有random_r的情况下运行同一程序,并且使用余弦和正弦值的计算作为替换,则双线程版