我们知道run()是Thread的一个方法,在创建Thread对象后,是否可以直接调用run方法进行运行?
答案是否的,直接调用run方法是只是单纯的在当前创建线程的线程下运行run方法,实际不是启动一个新的线程。
以下是通过代码的测试
@Slf4j(topic = "c.StartAndRun")
public class StartAndRun {
public static void main(String[] args) {
Thread thread = new Thread("t1") {
@Override
public void run() {
log.debug("running1");
}
};
thread.run();
log.debug(String.valueOf(thread.getState()));
thread.start();
log.debug(String.valueOf(thread.getState()));
log.debug("running2");
}
}
控制台打印结果
22:35:37 [main] c.StartAndRun - running1
22:35:37 [main] c.StartAndRun - NEW
22:35:37 [main] c.StartAndRun - RUNNABLE
22:35:37 [main] c.StartAndRun - running2
22:35:37 [t1] c.StartAndRun - running1
通过分析可以知道运行running1时实在main线程运行的且t1处于NEW状态,而t1.
只有真正调用start()后,t1才真正运行处于 RUNNABLE状态
注意:线程不能重复调用,否则会报IllegalThreadStateException