CurrentThread
关于stackTrace函数之前博客stackTrace说过了。
__thread int t_cachedTid = 0;
__thread char t_tidString[32];
__thread int t_tidStringLength = 6;
__thread const char* t_threadName = "unknown";
inline int tid(){if (__builtin_expect(t_cachedTid == 0, 0)){cacheTid();}return t_cachedTid;}
void CurrentThread::cacheTid()
{if (t_cachedTid == 0){t_cachedTid = detail::gettid();t_tidStringLength = snprintf(t_tidString, sizeof t_tidString, "%5d ", t_cachedTid);}
}
在线程中第一次调用tid()时,会利用线程局部存储保存线程ID,这里的线程ID并非pthread_t类型的那个ID,关于线程ID的说明,参看之前的博客Thread 。因为只有第一次需要获取ID,所以这里的if语句只有第一次为真。这里作者使用了编译器内置的__builtin_expect,告诉编译器t_cachedTid==0的可能性很小,编译器可以生成更高效的汇编代码。这样通过保存ID,之后获取线程ID就不需要再次调用系统函数,降低了开销。
bool CurrentThread::isMainThread()
{return tid() == ::getpid();
}
这个就是判断当前线程是不是主线程,通过判断线程ID和进程ID是否相同。
CurrentThread相关推荐
- fs:[124]对应CurrentThread
反汇编内核函数的时候经常会看到mov eax, fs:[124].一直没弄清楚fs寄存器在ring0存放的是什么.今天查了下资料. fs寄存器在Ring0中指向一个称为KPCR的数据结构,即FS段的起 ...
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行. 首先是执行Tomcat org.apache.catalina.startu ...
- currentThread的一个复杂案例
SubThread2.java package com.dym.juc.threadmethod;public class SubThread2 extends Thread {public SubT ...
- 线程的常用方法——currentThread方法||在main方法中直接调用run()方法,没有开启新的线程,以在run方法中的当前线程就是main线程||启动子线程,子线程会调用run方法
线程的常用方法--currentThread方法 Thread.currentThread()方法可以获得当前线程 Java 中的任何一段代码都是执行在某个线程当中的. 执行当前代码的线程就是当前线程 ...
- currentThread()方法的作用
currentThread() 方法可返回代码段正在被哪个线程调用的信息.下面通过一个示例进行说明. 例 1 假设在主线程中有如下代码: public class Run1 {public stati ...
- Thread.currentThread().getContextClassLoader().getResourceAsStream()读取配置文件
Java中使用的路径,分为两种:绝对路径和相对路径.具体而言,又分为四种: 一.URI形式的绝对资源路径 如:file:/D:/java/eclipse/workspace/j/bin/a URL是U ...
- Java——获取当前线程的对象(currentThread())(两种方式)
package com.yy.threadmethod;public class Demo2_CurrentThread {/*** public static Thread currentThrea ...
- 演示Thread.sleep(100)和Thread.currentThread().isInterrupted()+@Deprecated:将方法标注为废弃的方法...
package charpter08; public class TestInterrupt01 { public static void main(String[] args) { Processo ...
- android getid,Process.myTid()和Thread.currentThread().getId()区别
首先,两个方法都是返回线程ID,但结果是不同的,简单的说 android.os.Process.myTid()是系统级的ID Thread.currentThread().getId()是Java级的 ...
- Thread.currentThread().getContextClassLoader()和Class.getClassLoader()区别
2019独角兽企业重金招聘Python工程师标准>>> What is different between Thread.currentThread().getContextClas ...
最新文章
- MYSQL中删除重复记录
- 【Scratch】青少年蓝桥杯_每日一题_4.19_考试成绩
- linux idea 权限,Linux下idea由于缺少相关权限导致的tomcat ERROR
- C++之构造函数和析构函数强化
- linux系统优化思路
- redis 缓存 @class: 会有 $hibernateproxy_微信亿级在线点赞系统,用Redis如何实现?
- Asp.net三层结构原理与用意学习入门教程(五)
- Java redis
- 这个GitHub 1400星的Git魔法书火了,斯坦福校友出品
- DIV+CSS相对IE6、IE7和IE8的兼容问题
- 组件端Apollo配置放到NAS中
- AFNetworking下 http 改 https后遇到出现Error Domain=NSURLErrorDomain Code=-999 已取消 错误...
- android框架揭秘之Java服务学习笔记
- 下docfetcher先下Java,docfetcher怎么用?docfetcher搜索文档内容的方法介绍
- 网络流24题 Updating
- 微信电脑pc端显示不了头像和加载不了表情包,怎么解决该问题
- python爬今日头条app_今日头条app数据爬虫demo
- 浏览器百家争鸣,国产能打的浏览器来了!
- 数学分析:换元积分法与分部积分法
- Google(谷歌)高级搜索
热门文章
- (HTTP 503) (Request-ID: req-4f56de6f-d29c-4c44-aed3-e6ef8253384a)
- tomcat启动后出现乱码解决
- error An unexpected error occurred: “https://registry.npmjs.org/axios
- Spark RDD实训4:计算总成绩
- 无需root对oppo内置软件卸载方法
- The Servers project is closed(Tomcate )
- 18岁的融创正在成为地产圈“潮牌”
- EEPROM,NAND,NOR,QSPI FLASH的区别
- 一起来学习网站SEO优化工作流程到底怎么做?
- 抗D保 | 抗D宝 | 知道创宇云安全