美文网首页
如何控制线程的执行顺序

如何控制线程的执行顺序

作者: 我还是老油条 | 来源:发表于2019-04-17 22:31 被阅读0次

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

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

    执行main方法,猜猜结果?

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

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

    它就是join.

    看下结果:

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

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

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

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

    接下来再看看join源码:

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

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

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

    看代码:

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

    相关文章

      网友评论

          本文标题:如何控制线程的执行顺序

          本文链接:https://www.haomeiwen.com/subject/cyiowqtx.html