Thread源码
创始人
2025-05-28 06:17:51

目录

初始化

线程启动

join

interrupt


初始化

//初始化的时候,线程名称 "Thread-全局递增数字"init(null, target, "Thread-" + nextThreadNum(), 0);private static int threadInitNumber;
private static synchronized int nextThreadNum() {return threadInitNumber++;
}

小结:

  • 创建你的线程,就是你的父线程
  • 如果你没有指定ThreadGroup,你的ThreadGroup就是父线程的ThreadGroup
  • 你的daemon状态默认是父线程的daemon状态
  • 你的优先级默认是父线程的优先级
  • 如果你没有指定线程的名称,那么默认就是Thread-0格式的名称
  • 你的线程id是全局递增的,从1开始

线程启动

public synchronized void start() {//这里的判断是防止线程多次启动,  一旦启动 threadStatus就不在是0if (threadStatus != 0)throw new IllegalThreadStateException();group.add(this);boolean started = false;try {start0();started = true;} finally {try {if (!started) {group.threadStartFailed(this);}} catch (Throwable ignore) {/* do nothing. If start0 threw a Throwable thenit will be passed up the call stack */}}
}

小结

  • 一旦启动了线程之后,就不能再重新启动了,多次调用start()方法,因为启动之后,threadStatus就是非0的状态了,此时就不能重新调用了
  • 你启动线程之后,这个线程就会加入之前处理好的那个线程组中
  • 启动一个线程实际上走的是native方法,start0(),会实际的启动一个线程
  • 一个线程启动之后就会执行run()方法

join

  • 当前线程调用某个线程的join方法, 当前线程会阻塞等待 被调用线程执行结束才会继续进行下去

interrupt

  • interrupt打断一个线程,其实是在修改那个线程里的一个interrupt的标志位,打断他以后,interrupt标志位就会变成true,所以在线程内部,可以根据这个标志位,isInterrupted这个标志位来判断,是否要继续运行

  • 并不是说,直接interrupt一下某个线程,直接就不让他运行了

  • 还有一个更加常见的用法,就是说什么呢?打断一个线程的休眠

相关内容

热门资讯

非洲旅游业迈向增长新阶段(国际... 2026非洲旅游大会期间,与会嘉宾在纳米比亚国家馆参观、洽谈。 与会嘉宾在南非航空公司展台前咨询。...
周六观球必看!紫金这些路段将实... 关于粤超联赛(河源赛区) 赛事期间实施临时交通管制的通告 2026年5月16日(本周六)19时30分...
携程、美团、阿里抢的不是旅游攻... 今年五一,旅游行业有个变化特别明显。 不是游客多了,也不是机票酒店卖爆了,而是用户开始把“决策权”交...
紫言酒庄特色探秘与红酒品牌排名... 紫言酒庄的独特魅力分析 紫言酒庄以其独特的酿造工艺和高品质葡萄酒而闻名。位于风景秀丽的地区,紫言...