02-启动线程

nobility 发布于 2021-04-17 2533 次阅读


启动线程

run方法与start方法比较

  • 直接调用run()方法并未开启新的线程,而是在主线程中被当作一个普通的方法进行调用
  • 调用start()方法开启新的线程,由新线程调用run()方法
public static void main(String[] args) {
  Thread thread = new Thread(() -> System.out.println("当前线程正在执行:" + Thread.currentThread().getName()));
  thread.run();  //main
  thread.start();  //Thread-0
}

start方法含义

  • 请求JVM在空闲时启动新线程
    • 调用start方法的顺序并非线程的执行顺序,线程的执行顺序由线程调度器决定
    • 新线程一定由父线程创建
  • 启动后让新线程处于就绪状态,也就是获取到了除CPU之外的其他资源
    • 当获取到CPU资源后进入运行状态
    • 不能重复的调用start方法,若启动多次会抛出IllegalThreadStateException非法线程状态异常

start方法源码分析

  1. 首先检查该线程状态,若状态是已启动状态则会抛出IllegalThreadStateException非法线程状态异常
  2. 加入线程组
  3. 调用sart0()这个本地方法
此作者没有提供个人介绍
最后更新于 2021-04-17