AndroidJNI如何在线程中调用java的非静态方法

我最近在使用Android里的JNI,我发现只要调用的是GetStaticMethodID,无论是用CallVoidMethod还是CallStaticVoidMethod,都可以正常调用JAVA里的静态方法,这是为什么?
还有,在C 中,非主线程中,我用过AttachCurrentThread,可调用静太的JAVA方法,但无法使用非静态的方法,是我使用错了吗?

1个回答

无论是用CallVoidMethod还是CallStaticVoidMethod,都可以正常调用JAVA里的静态方法,这是为什么?
A:这个我觉得是不可能的
还有,在C 中,非主线程中,我用过AttachCurrentThread,可调用静太的JAVA方法,但无法使用非静态的方法,是我使用错了吗?
A:都可以调用,只是调用方法不同,静态方法需要类型名,而成员方法需要实例名
(*useEnv)->CallStaticVoidMethod(useEnv, mJniclass, mMethodID, len); // mJniClass是类名
(*env)->CallVoidMethod(env,obj,mMethodID,fileId);//obj是类的实例化对象

pjiamu
F-LS 谢谢
5 年多之前 回复
luowenlong860502
媒体盒子 补充,CallVoidMethod必须AttachCurrentThread,而CallStaticVoidMethod不用,因为static函数就跟c里面调用普通函数一样,而类成员函数就需要上下文环境
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java中静态方法的线程安全问题

Java中多个线程同时访问一个静态方法是否存在线程安全问题? 比如以下代码,两个线程同时对方法中b修改不同的值,会有线程安全问题吗? new Thread(new Runnable() { @Override public void run() { fun(0); } }).start(); new Thread(new Runnable() { @Override public void run() { fun(1); } }).start(); } static void fun(int a) { int b = 100; b = a; for (int i=0; i<100; i++) System.out.println(Thread.currentThread().getName() + "-->" + b); }

Java静态方法的线程安全性问题

如果多个线程同时访问同一个静态方法,后一个线程传递的参数值会覆盖前一个线程传递的参数值吗?代码示例如下: 被访问的静态资源: public class C { public static void test(String[] value) throws InterruptedException{ Thread.sleep(5000); System.out.println(Thread.currentThread().getId()); for(String v : value){ System.out.println(v); } } } 线程1: public class A { public static void main(String[] args) throws InterruptedException { C.test(new String[]{"A","B", "C"}); } } 线程2: public class B { public static void main(String[] args) throws InterruptedException { C.test(new String[]{"D","E", "F"}); } } 在线程1访问静态方法test并传递参数后,假设在执行中或执行之前,下一个线程2也访问了test方法并传递了新的参数,此时在线程1遍历参数时,会遍历到线程2传递的参数吗?

C++多线程调用JNI的问题

在主线程中可以findclass,但是在子线程中却找不到,找的是同一个class,在子线程正可以找到系统的类,比如java/long/String

Android 在webview中js怎么调用java里面的方法

Android 在webview中js怎么调用java里面的方法 需要调用的是一个社会化分享的

java调用dll,是否可以多线程调用dll的方法?

环境是这样的 java调用dll a,此dll调用另一个dll b控件 请问这样情况下,java是否可以多线程多用dll a呢 如题 非常感谢

C#不调用非静态方法会占用内存吗?不调用类,静态方法会占用内存吗?

①不实例化对象,该类的非静态方法会占用内存吗? ②不调用类,静态方法会占用内存吗? ③实例化对象不调用方法,该对象的非静态方法会占用内存吗?

java多线程中的调用另一个类的paintComponent()方法无效

在多线程中,在该类中创建另一个类含有paintComponent()方法的对象, 在线程结束之前调用第二个paintComponent()方法有效可以执行 (即:应该是第一个paintComponent()方法没有执行完毕之前)。 若第一个paintComponent()方法没有执行完毕之后,再执行另一个对象的 paintComponent()方法,就会无效。 为什么呢?怎么解决?

java方法内调用方法,参数传递对象是否线程安全

按自己的理解,线程执行,其中基本数据类型是放置于stack中,但引用堆中对象,当在方法中调用其他方法参数为对象时,是否每个对象针对线程唯一,是否线程安全,求赐教

线程对象调用wait()方法会怎么样?

据我所知,对象调用wait(),则访问对象的线程wait,那么如果是线程对象调用wait()方法,谁wait呢? 哪位同学以前思考过吗? 谢谢! ``` // 使用案例: 线程的Join方法中 public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } } ```

Java静态方法的同步锁

Java静态方法的同步锁必须是字节码class吗?可以是static对象吗?

java如何开启两个线程后同时调用一个类的方法

不分先后顺序,是同时调用,怎么写。

是否java的程序调用必须要使用线程才会异步执行?

我对程序执行有一些概念认知不清,想请教基础好的同学一些问题。 以下是我的认知: 1、方法内执行多个类的方法,应该是必须等前一个方法执行完了(有执行结果了)之后才会之后后面的代码。这个可以称之为同步的代码执行。 2、当启动新的线程时,程序不需要等到新的线程里的代码执行完之后,才会继续执行主线程。而是启动完新的线程之后继续执行主线程后面的代码。 以下是我的问题: 1、对于普通的方法(代码就是本地执行,类似new 、syso这样的代码),我觉得没问题。但假如方法里是执行mybatis(或者其它我不了解的第三方调用)的程序, 如: ``` syncOborMDMMapper.updateHospital(); syncOborMDMMapper.updateProduct(); syncOborMDMMapper.updateProductLine(); ``` 而这些方法执行的是存储过程: <update id="updateHospital" statementType="CALLABLE"> {call sync_hospital} </update> 我不知道这种情况,是否也是同步的呢,必须等到updateHospital这个存储过程执行完了之后才会之后后面的存储过程呢? 2、其实这个问题我可以本地去测试,通过log日志去认知,但其实我想了解的是,是否在java里,我只要不是启动新的线程,方法调用本身必须等到这个方法执行完了之后才会执行它所在的块级区域后面的代码?这套机制不会受方法具体是做什么的。 3、也就是说,以后只要我看到代码没有显示的启动线程,则必然是同步的,无需多考虑其它情况

java线程中的run方法怎样算是结束?

代码如下: ``` import java.applet.Applet; import java.applet.AudioClip; public class SoundEffect { public static void playSound(){ new PlayThread().start(); } } class PlayThread extends Thread{ private AudioClip ac; PlayThread(){ ac = Applet.newAudioClip(SoundEffect.class.getResource("/resources/sound/a.wav")); } public void run() { ac.play(); } } ``` run方法会调用一次audioclip的play()方法,结束之后线程会自动销毁对吧? 可是声音播放是有一段时间的,线程是如何知道声音播放完成了呢?

c++关于多线程调用一个类中方法

目前写了一个多线程项目,由多个子项目组成,目前想在同步子线程中访问一个类中的初始化com口方法,但是线程可能同时进入初始化方法导致crash,想设置一个锁但是取到的 句柄地址都不一样无法上锁,请问这种情况要怎样实现

多线程同时调用同一个方法读取不同对象数据怎么确保多线程线程执行完之后在执行其他逻辑。

比如说有100个电表,我要读取电表的读数,我创建100个线程,都调用同一个读取参数的方法,怎么让他在读完所有电表的读数后在执行后面的其他代码。如何实现我说的这种场景,面试时被问到的

java线程中 start方法和run方法的区别和联系是什么

java线程中 start方法和run方法的区别和联系是什么 start是启动一个线程到就绪状态 run是运行一个线程 要run一个线程必须先start一个线程,这么理解对不

一个线程中能调用一个类中的所有方法吗?而且每次方法的参数不一样

一个线程中能调用一个类中的所有方法吗?而且每次方法的参数不一样,求大神讲解一下

java多线程中关于使用notify()方法的几个疑问

代码: ``` public class NotifyAndWaitTest2 implements Runnable { public int i = 0; public Object lock; public SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); public NotifyAndWaitTest2(Object o) { this.lock = o; } @Override public void run() { synchronized (lock) { System.out.println(Thread.currentThread().getName() + " enter the SYNCHRONIZED block --- "+ sdf.format(new Date())); try { while (i < 9) { Thread.sleep(500); lock.notify(); lock.wait(); System.out.println(Thread.currentThread().getName() + " say:" + i++ + " --- " + sdf.format(new Date())); } lock.notify(); return; } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { Object lock = new Object(); NotifyAndWaitTest2 test = new NotifyAndWaitTest2(lock); Thread t1 = new Thread(test,"Thread A"); Thread t2 = new Thread(test,"Thread B"); Thread t3 = new Thread(test,"Thread C"); Thread t4 = new Thread(test,"Thread D"); t1.start(); t2.start(); t3.start(); t4.start(); } } ``` 执行结果: ``` Thread A enter the SYNCHRONIZED block --- 10:47:07.242 Thread B enter the SYNCHRONIZED block --- 10:47:07.743 Thread C enter the SYNCHRONIZED block --- 10:47:08.243 Thread D enter the SYNCHRONIZED block --- 10:47:08.743 Thread C say:0 --- 10:47:09.243 Thread D say:1 --- 10:47:09.744 Thread C say:2 --- 10:47:10.244 Thread D say:3 --- 10:47:10.744 Thread C say:4 --- 10:47:11.245 Thread D say:5 --- 10:47:11.745 Thread C say:6 --- 10:47:12.246 Thread D say:7 --- 10:47:12.746 Thread C say:8 --- 10:47:13.247 Thread D say:9 --- 10:47:13.247 Thread B say:10 --- 10:47:13.247 Thread A say:11 --- 10:47:13.247 ``` 这段代码我在 jdk1.7 和 jdk1.8 中都执行过,结果是"相同的" 我主要有两个问题:(以我贴出的这个执行结果为例) 1、在线程A 和线程B 进入了同步代码块之后,并且线程B 调用了 wait() 方法,为什么接下来一定是另外两个线程进入同步代码块?而不是线程A 开始打印 say。是"让新的线程进入同步代码块"的优先级比"调用wait()方法的线程被唤醒"的优先级高吗? 2、为什么调用 notify() 方法只能唤醒最后一个调用了 wait() 方法的线程?就像上面这个执行结果,只有线程C 和线程D 互相唤醒对方,为什么不能唤醒其他的线程,比如线程A 和线程B? 我认为抢对象锁应该是不规律的、随机的,比如这样: ``` Thread A enter the SYNCHRONIZED block Thread B enter the SYNCHRONIZED block Thread A say:0 Thread C enter the SYNCHRONIZED block Thread B say:1 Thread A say:2 Thread D enter the SYNCHRONIZED block Thread B say:3 Thread C say:4 ```

JAVA传参的问题 如何让多个线程可以调用一个参数

先贴出代码 private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 01234) { Bundle bundle = msg.getData(); String s = bundle.getString("e1"); System.out.println(s); Toast.makeText(MainActivity.mactivity, s, Toast.LENGTH_SHORT).show(); } ``` ``` 在外部类A里面用handler接收了其他函数传来的消息然后放在String s 里面,现在想在主类mainactivity里面调用到这个s的值要怎么做?我已经试过把String s定义成静态方法了是不行的因为我定义的时候 public static String s = "";然后再handler里面赋值,调用的时候还是会调 s = ""的这个空值 而且我觉得在程序里面最好还是少用static 定义变量好吧。 请问这个要怎么做才能实现调用呢?谢谢了!还望指点!!!

学Python后到底能干什么?网友:我太难了

感觉全世界营销文都在推Python,但是找不到工作的话,又有哪个机构会站出来给我推荐工作? 笔者冷静分析多方数据,想跟大家说:关于超越老牌霸主Java,过去几年间Python一直都被寄予厚望。但是事实是虽然上升趋势,但是国内环境下,一时间是无法马上就超越Java的,也可以换句话说:超越Java只是时间问题罢。 太嚣张了会Python的人!找工作拿高薪这么简单? https://edu....

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

为什么程序猿都不愿意去外包?

分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助

Java校招入职华为,半年后我跑路了

何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

@程序员:GitHub这个项目快薅羊毛

今天下午在朋友圈看到很多人都在发github的羊毛,一时没明白是怎么回事。 后来上百度搜索了一下,原来真有这回事,毕竟资源主义的羊毛不少啊,1000刀刷爆了朋友圈!不知道你们的朋友圈有没有看到类似的消息。 这到底是啥情况? 微软开发者平台GitHub 的一个区块链项目 Handshake ,搞了一个招募新会员的活动,面向GitHub 上前 25万名开发者派送 4,246.99 HNS币,大约价...

用python打开电脑摄像头,并把图像传回qq邮箱【Pyinstaller打包】

前言: 如何悄悄的打开朋友的摄像头,看看她最近过的怎么样,嘿嘿!这次让我带你们来实现这个功能。 注: 这个程序仅限在朋友之间开玩笑,别去搞什么违法的事情哦。 代码 发送邮件 使用python内置的email模块即可完成。导入相应的代码封装为一个send函数,顺便导入需要导入的包 注: 下面的代码有三处要修改的地方,两处写的qq邮箱地址,还有一处写的qq邮箱授权码,不知道qq邮箱授权码的可以去百度一...

C++(继承):19---虚基类与虚继承(virtual)

一、菱形继承 在介绍虚继承之前介绍一下菱形继承 概念:A作为基类,B和C都继承与A。最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访问某些成员的时候会发生二义性 缺点的解决: 数据冗余:通过下面“虚继承”技术来解决(见下) 访问...

计算机网络——浅析网络层

一、前言 注意,关于ipv4和ipv6,ipv4是ip协议第4版本,也表示这个版本的ip一共4个字节,同样地,ipv6是ip协议第6版本,也表示这个版本的ip一共6个字节。 关于网络层使用路由器实现互联:在计算机网络的分层结构中,不同层有不同的中继设备: 计算机网络层 中继设备/中继系统 物理层 中继器、集线器Hub 数据链路层 网桥或交换机(交换机是多端口网桥,两者本质上是一个东西) 网络层 路...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

女朋友过生日,我花了20分钟给她写了一个代理服务器

女朋友说:“看你最近挺辛苦的,我送你一个礼物吧。你看看想要什么,我来准备。” 我想了半天,从书到鞋子到电子产品最后到生活用品,感觉自己什么都不缺,然后和她说:“你省省钱吧,我什么都不需要。” 她坚持要送:“不行,你一定要说一个礼物,我想送你东西了。” 于是,我认真了起来,拿起手机,上淘宝逛了几分钟,但还是没能想出来缺点什么,最后实在没办法了:“这样吧,如果你实在想送东西,那你就写一个代理服务器吧”...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

立即提问
相关内容推荐