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一下某个线程,直接就不让他运行了

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

相关内容

热门资讯

来内蒙古过大年,一卡“通游” “早就听说内蒙古的冬日风光震撼,却没想到能体验到冰浮。一卡通很实用,多个景区不用反复预约购票,省心又...
炸香菇这样做太绝了!老师傅教的... 你是否曾经在家尝试制作炸香菇,却总是失败,做出来的香菇软塌塌、油腻腻,完全没有那种酥脆的口感?如果你...
原创 吃... 标题:吃西餐时,点了一份“小葡萄”,女友不稀罕,服务员:内行人? 在西餐的世界里,每一道菜肴都承载...
神木花馍:面香里的幸福年味 本报讯(通讯员 乔雨婷 贾姣)临近春节,神木的烟火气里,藏着花馍的别样年味。蒸花馍是门老手艺,也是神...