run()和start()

我们知道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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。