关于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相关推荐

  1. fs:[124]对应CurrentThread

    反汇编内核函数的时候经常会看到mov eax, fs:[124].一直没弄清楚fs寄存器在ring0存放的是什么.今天查了下资料. fs寄存器在Ring0中指向一个称为KPCR的数据结构,即FS段的起 ...

  2. Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别

    查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行. 首先是执行Tomcat org.apache.catalina.startu ...

  3. currentThread的一个复杂案例

    SubThread2.java package com.dym.juc.threadmethod;public class SubThread2 extends Thread {public SubT ...

  4. 线程的常用方法——currentThread方法||在main方法中直接调用run()方法,没有开启新的线程,以在run方法中的当前线程就是main线程||启动子线程,子线程会调用run方法

    线程的常用方法--currentThread方法 Thread.currentThread()方法可以获得当前线程 Java 中的任何一段代码都是执行在某个线程当中的. 执行当前代码的线程就是当前线程 ...

  5. currentThread()方法的作用

    currentThread() 方法可返回代码段正在被哪个线程调用的信息.下面通过一个示例进行说明. 例 1 假设在主线程中有如下代码: public class Run1 {public stati ...

  6. Thread.currentThread().getContextClassLoader().getResourceAsStream()读取配置文件

    Java中使用的路径,分为两种:绝对路径和相对路径.具体而言,又分为四种: 一.URI形式的绝对资源路径 如:file:/D:/java/eclipse/workspace/j/bin/a URL是U ...

  7. Java——获取当前线程的对象(currentThread())(两种方式)

    package com.yy.threadmethod;public class Demo2_CurrentThread {/*** public static Thread currentThrea ...

  8. 演示Thread.sleep(100)和Thread.currentThread().isInterrupted()+@Deprecated:将方法标注为废弃的方法...

    package charpter08; public class TestInterrupt01 { public static void main(String[] args) { Processo ...

  9. android getid,Process.myTid()和Thread.currentThread().getId()区别

    首先,两个方法都是返回线程ID,但结果是不同的,简单的说 android.os.Process.myTid()是系统级的ID Thread.currentThread().getId()是Java级的 ...

  10. Thread.currentThread().getContextClassLoader()和Class.getClassLoader()区别

    2019独角兽企业重金招聘Python工程师标准>>> What is different between Thread.currentThread().getContextClas ...

最新文章

  1. MYSQL中删除重复记录
  2. 【Scratch】青少年蓝桥杯_每日一题_4.19_考试成绩
  3. linux idea 权限,Linux下idea由于缺少相关权限导致的tomcat ERROR
  4. C++之构造函数和析构函数强化
  5. linux系统优化思路
  6. redis 缓存 @class: 会有 $hibernateproxy_微信亿级在线点赞系统,用Redis如何实现?
  7. Asp.net三层结构原理与用意学习入门教程(五)
  8. Java redis
  9. 这个GitHub 1400星的Git魔法书火了,斯坦福校友出品
  10. DIV+CSS相对IE6、IE7和IE8的兼容问题
  11. 组件端Apollo配置放到NAS中
  12. AFNetworking下 http 改 https后遇到出现Error Domain=NSURLErrorDomain Code=-999 已取消 错误...
  13. android框架揭秘之Java服务学习笔记
  14. 下docfetcher先下Java,docfetcher怎么用?docfetcher搜索文档内容的方法介绍
  15. 网络流24题 Updating
  16. 微信电脑pc端显示不了头像和加载不了表情包,怎么解决该问题
  17. python爬今日头条app_今日头条app数据爬虫demo
  18. 浏览器百家争鸣,国产能打的浏览器来了!
  19. 数学分析:换元积分法与分部积分法
  20. Google(谷歌)高级搜索

热门文章

  1. (HTTP 503) (Request-ID: req-4f56de6f-d29c-4c44-aed3-e6ef8253384a)
  2. tomcat启动后出现乱码解决
  3. error An unexpected error occurred: “https://registry.npmjs.org/axios
  4. Spark RDD实训4:计算总成绩
  5. 无需root对oppo内置软件卸载方法
  6. The Servers project is closed(Tomcate )
  7. 18岁的融创正在成为地产圈“潮牌”
  8. EEPROM,NAND,NOR,QSPI FLASH的区别
  9. 一起来学习网站SEO优化工作流程到底怎么做?
  10. 抗D保 | 抗D宝 | 知道创宇云安全