1. 线程常用方法概述
2. start() vs run()
2.1 run()方法
测试代码:
import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.Test4")
public class Test4 {public static void main(String[] args) {Thread t1 = new Thread("t1") {@Overridepublic void run() {log.debug(Thread.currentThread().getName());try {
Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}};t1.run();log.debug("do other things ...");}
}
运行结果:
- 即使是调用t1线程的run方法,程序仍在 main 线程运行
2.2 start()方法
运行结果:
- 调用t1线程的start方法,程序在 t1 线程运行
2.3 小结
- 直接调用 run 是在主线程中执行了 run,没有启动新的线程
- 使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码
2.4 补充:
连续调用2次start()方法,程序会报错
运行结果:
start方法对线程状态的影响:
import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.Test4")
public class Test4 {public static void main(String[] args) {Thread t1 = new Thread("t1") {@Overridepublic void run() {log.debug(Thread.currentThread().getName());}};System.out.println("t1线程调用start方法前, t1的状态为: " + t1.getState());t1.start();System.out.println("t1线程调用start方法后, t1的状态为: " + t1.getState());}
}
run方法对线程状态的影响(无影响):
3. 不推荐使用的方法