线程在启动以后,并不是立马执行,而是要等待CPU的一个资源调度,而CPU调度的顺序是操作系统通过复杂算法计算得到的。等启动的线程得到CPU指令后,才和主线程做一个切换,执行run方法,所以说自然情况下并不是按启动顺序执行,如下图:
要想线程按照顺序执行,可以有如下方法。
方法一:join方法的使用
join方法的作用就是让正在执行的线程停止,释放出cpu控制权,让调用join的线程立即执行,如下图:
方法二:ExecutorService
通过ExecutorService executors = Executors.newSingleThreadExecutor();创建这个单线程的线程池,然后将所有要执行的线程任务提交到线程池,如下图: