博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android native开发设置线程名需要注意的地方
阅读量:4030 次
发布时间:2019-05-24

本文共 854 字,大约阅读时间需要 2 分钟。

前言

最近在native开发过程为了分析SDK使用线程情况,设置线程名过程中遇到了两个“坑”,故做下简单的总结记录同时跟大家分享一下。

注:这里的native线程,是指用使用pthread创建的线程或直接使用c++的std::thread类来创建新的线程,Andorid/linux上使用prctl(PR_SET_NAME, thread_name, 0, 0, 0)来设置线程名

总结

第一点:设置线程名可能会失效

一般情况下我们native的线程是需要跟java层的模块交互的,由于native线程是没有JVM环境的,所以在在native线程操作java层的代码前,需要attched到JVM于便获取到线程的JVM环境,才能继续调用Java层的接口/代码。通常attched的代码如下

//G_JavaVM在JNI_OnLoad的时候缓存了G_JavaVM->AttachCurrentThread(&tmpEnv, NULL)// 第二个JavaVMAttachArgs 参数为NULL,之前设置的线程名会变成Thread-xxx这种名称

如果需要保持之前设置的线程名有效,需要配置JavaVMAttachArgs中的线程名,示例代码如下

//获取之前设置的线程名char thread_name[128] = {0};prctl(PR_GET_NAME, (char *)(thread_name));JavaVMAttachArgs args;args.version = JNI_VERSION_1_6;// 赋值到JavaVMAttachArgs的nameargs.name = (char *)thread_name;args.group = NULL;G_JavaVM->AttachCurrentThread(&tmpEnv,  JavaVMAttachArgs)

第二点:线程名有长度限制

不要设置太长的线程名,线程名的长度是16个字节,包括结束符’\0’,有效的长度是15个字节

资料

转载地址:http://numbi.baihongyu.com/

你可能感兴趣的文章
机器学习中样本缺失值的处理方法
查看>>
机器学习中样本比例不平衡的处理方法
查看>>
机器学习中的文本处理
查看>>
K近邻分类
查看>>
Java集合
查看>>
Java泛型、反射、注解、Lambda表达式
查看>>
Spring框架入门
查看>>
Linear Regression及各种线型回归在正则化中的应用
查看>>
朴素贝叶斯算法
查看>>
逻辑回归
查看>>
感知机 - 支持向量机
查看>>
决策树算法(ID3、C4.5、CART)
查看>>
集成学习(Bagging、Boosting、Stacking)
查看>>
无监督学习
查看>>
K均值算法(K-means)
查看>>
机器学习中的损失函数
查看>>
机器学习中的性能度量
查看>>
机器学习中的优化问题
查看>>
机器学习中的参数估计方法
查看>>
机器学习中的特征工程
查看>>