如何控制线程的执行顺序

2019-04-17  本文已影响0人  我还是老油条

废话不多少,直接上代码:如图

创建三个线程:thread1,thread2,thread3

执行main方法,猜猜结果?

结果是没有顺序的,这是因为启动一个线程,并不是立马去执行,它要等cpu的调度,线程切换是随机的,cpu随机分片,所以没有顺序

那么有什么方法可以解决呢?

它就是join.

看下结果:

有顺序了吧,问题解决了,可是为什么呢?

join的作用:让主线程等待子线程结束后才能运行。

在这里:main 就是主线程,它会等待thread1.执行完毕后才运行。

如图所示,join 让主线程休眠,等子线程结束才运行,这样就保证了顺序

接下来再看看join源码:

不传参数,默认走的是这个wait,点进去看,它是走的object的wait方法,而且是native的。

这样就彻底弄明白join 完成线程控制的原理。

再说另一种方法,在java1.5以后, concurrent 包的流行,ExcutorService的出现也能解决此问题

看代码:

结果也是一样的,那是因为newSingleThreadExecutor,是先进先出的队列形式(FIFO),所以也可以保证执行顺序。

上一篇 下一篇

猜你喜欢

热点阅读