# 136. 初识线程

  • 线程,英文名叫做 Thread,是 java 程序执行的发动机。就是线程运行着我们的代码

  • 一个程序就是操作系统的一个进程,英文名叫做 Process。一个进程下可以有很多个线程

# 线程的执行

线程其实就是执行一个入口方法,执行完毕就结束了。比如我们之前写的程序,都是使用一个线程执行 main 方法,执行完毕后,线程就结束了。

线程在执行方法的时候,每次遇到方法调用,都会给当前的线程栈增加一层。这一层里保存的,就是线程当前的执行状态,比如当前方法的局部变量值,当前方法执行到哪里了等。

所以线程栈里的每一条,都是方法已经开始执行但是还没有结束的方法。没有结束是因为它代码还没执行完,或者是在等待其调用的方法执行完。

举个例子:

package com.geekbang.whatisthread;

public class StopALittle {
  public static void main(String[] args) throws InterruptedException {
    printSlowly("太阳在这个平静的小村庄缓缓升起,又是开始了平常的一天。我们故事的主人公睡眼惺忪的起来\n" +
        "......", 300);
  }

  public static void printSlowly(String text, long interval) throws InterruptedException {
    for (char ch : text.toCharArray()) {
        Thread.sleep(interval);
        System.out.print(ch);
    }
    System.out.println();
  }
}

举个例子:

package com.geekbang.whatisthread;

public class StopAndSeeThread {
  public static void main(String[] args) {
    m1();
  }

  private static void m1(){
    m2();
  }

  private static void m2() {
    int a =999;
    m3();
  }

  private static void m3() {
    int a =333;
    m4();
  }

  private static void m4() {
    m5();
  }

  private static void m5() {
    int a = 555;
    m6();
}

  private static void m6() {
    System.out.println("断点停住");
  }
}

可以看到每执行一个方法,都会在线程栈增加一条

提示

  • 调用方法不会启动新的线程,只会让当前的线程在当前的stack上创建一个新的frame,用来给方法里的局部变量,参数等分配内存空间。

  • 只有Thread对象的start方法才会创建一个新的线程。