java多线程调用run和不调用run的区别

当在java程序中创建一个线程的时候,会三种情况:

1,只运行run方法

2,先执行start,再执行run方法

3,只运行start方法

三者的区别如下:

运行方式区别
只运行run只运行run的时候,多个线程的执行顺序是按代码顺序执行的,只不过执行的线程是当前线程,而不是你定义的线程,比如:你在main函数里面运行了定义了线程1、2、3。那么只调用1.run()、2.run()、3.run()的话,运行的线程实际上还是main线程的,和1、2、3没有关系,这个时候线程类就相当于普通类,调用run方法,就相当于调用了一个普通类的方法
先执行start,再运行run这时候,才具有线程调用的同步执行效果,执行任务的线程可能是当前线程、也可能是你定义的线程
只运行start这个时候会把任务的执行交给任务规划器,具体线程的执行需要等待系统去安排,任务执行的时间和顺序也是不确定的,但是这些任务肯定是你定义的线程运行的,而不像只运行run时候的现象,当前主动调用的线程不会参与这些任务的执行,例如像只运行run的情形,main不会定义线程里面的任务的