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

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

相关内容

热门资讯

富力熊:以价值共生为核,重塑高... 在消费升级驱动行业变革的背景下,高端零食市场的竞争核心已从“产品供给”转向“价值创造”。富力熊跳出传...
美食故事为何不只标签?揭秘食物... 在美食故事里所承载着的这般内容,它是远远超越了仅仅只是单纯的烹饪步骤以及食材清单的。它就好像是一个存...
长沙小众麻辣烫探店指南:地道风... 在长沙,如何寻得一碗地道又超值的麻辣烫? “真正的市井美味,往往藏在城市不经意的拐角处,它们从不在...
家常菜里的温暖回忆:美食如何唤... 开启一次美味的品尝,常常会撩拨起一段往昔的记忆,这段记忆也许关联着某个特定的地方,也许牵扯某个特定的...
减脂期主食别乱吃!8 种低卡粗... 减肥党是不是总被 “主食刺客” 拿捏?想吃饱又怕胖,其实关键不是戒掉碳水,而是选对碳水! 毕竟碳水才...