3。线程是否按照启动顺序执行
前言线程是按照启动顺序执行的吗?如何确保线程按照启动顺序执行?Thread.join()如何却确保线程按照启动顺序执行的?线程按照启动顺序执行
调用Thread的start()方法启动线程时,线程的执行顺序是不确定的。也就是说,在同一个方法中,连续创建多个线程后,调用线程的start()方法的顺序并不能决定线程的执行顺序。
看一个简单的示例程序,如下所示。
示例程序1
在ThreadSort01类中分别创建了三个不同的线程,thread1、thread2和thread3,接下来,在程序中按照顺序分别调用thread1.start()、thread2.start()和thread3.start()方法来分别启动三个不同的线程。
第一次执行顺序thread1 thread3 thread2
第二次执行顺序thread2 thread3 thread1
第三次执行顺序thread1 thread2 thread3
可以看到,每次运行程序时,线程的执行顺序可能不同。线程的启动顺序并不能决定线程的执行顺序。 如何确保线程的执行顺序
可以使用Thread类中的join()方法来确保线程的执行顺序。示例代码如下:
示例程序2
第一次执行顺序thread4 thread5 thread6
第二次执行顺序thread4 thread5 thread6
第三次执行顺序thread4 thread5 thread6
可以看到,每次运行的结果都是相同的,所以,使用Thread的join()方法能够保证线程的先后执行顺序。 Thread.join()如何却确保线程按照启动顺序执行的
既然Thread类的join()方法能够确保线程的执行顺序,我们就一起来看看Thread类的join()方法到底干了什么。
进入Thread的join()方法,如下所示:
Thread.join()源码
可以看到join()方法调用同类中的一个join ( long millis )方法,并传递参数0。继续查看 join ( long millis ),如下:
Thread.join(long millis)源码
可以看到join ( long millis )方法使用了synchronized修饰,意味着这个方法同一时刻只能由一个实例或方法调用。如果入参millis为0,则在判断线程是处于活跃状态之后调用wait(0);如果millis不为0,则计算延迟时间delay,调用wait(delay)。 继续跟进wait方法,如下:
Thread.wait()
wait()方法是一个本地方法,通过JNI的方式调用JDK底层来使线程等待执行完成。
注意:wait的作用是释放对象锁,释放CUP资源,使当前线程阻塞,进入对象的wait set,直到被通知、被中断或timeout到期。即会使主线程(调用join()方法的线程)进入阻塞状态,等待子线程执行完成后再次向下执行。 验证主线程调用Thread.join()是否会等待子线程执行完毕后继续执行
创建三个线程thread4、thread5、thread6,线程thread4输出之后sleep 20秒,再执行thread5、thread6。
验证主线程是否会等待子线程执行完毕后继续执行
执行代码会发现,程序会在执行thread4完输出,等待20秒之后,继续执行thread5、thread6。即在调用join()方法之后阻塞主线程,等待子线程执行完之后继续向下执行。
BeautyDive懒需求日益增长,穿戴式护肤借力而生图片来源Narvvi近年来都市人群工作与生活的压力陡增,极具时代特征的内卷一词热度高居不下,在引起巨大共鸣的同时,无形中成为了一个伸向生活各个方面的触角,护肤领域也难逃其影响。面对
中国天眼,又有新发现中国天眼探测到的斯蒂芬五重星系周围天区的原子气体分布。(中科院国家天文台供图)中国天眼发现迄今宇宙最大原子气体结构尺度比银河系大20倍科学家日前利用中国天眼FAST对致密星系群斯蒂
正式官宣!篮网签下26分13板悍将!碌碌无为,纳什进入离队倒计时对于篮网这支球队来说,休赛期能够安定杜兰特和欧文两名超巨的心,成功将他们留在球队,已经是一件头等重要事情。两人之所以闹着离开队伍,最大的原因是继续待在球队看不到夺冠的希望,篮网能做
小说连载李四两口子的芝麻琐事(13)李四大名叫李四平,他是农民的儿子,当然也是农民的孙子,祖辈世代务农。如果再上溯一千四百年的话,那就不一样了,据李氏族谱记载,他们的祖先是唐朝皇帝唐太宗李世民。李四看过族谱,具体也没
闲谈过往琐事今天成都依然是高温,天气预报是38度,但是根据我几十年前在南京读书的时候,经历过接近一个月的四十度高温,我相信,今天成都的温度超过四十度了。可是我却是坐在空调房间里面,吹着冷风,看
新进职场,总被安排各种杂事琐事,很累很烦,怎么办?有网友留言新进职场,总被安排各种杂事琐事,很累很烦,怎么办?其实这是每个人刚入职场时都会遇到的情形,当然除了那些自带关系的!我大学毕业刚到单位时,父母总是耳提面命,让我上班去早点,
双十一开打第一天,小米Redmi赢麻了你能想?今年双十一从10月20日20点就正式开始了。所有人都知道往往预售第一天是最火热的时候,那么对于手机品牌来讲前期的宣传工作到位了吗?预售第一天谁又是最大赢家呢?答案其实很简单
平凡的世界里的人都不平凡铁幕之下,黄原之上,人们战天斗地,不断创造奇迹,同时也在盲目中酿成悲剧。偏激不切实际的指令之下,急功近利的执行者们,将重担压人们身上。时代洪流激荡之下,平凡的世界里,路遥笔下生长着
散文静守一个未知归期的笑容珍惜所有不期而遇的温暖,看淡所有不辞而别的薄凉。酒会一点点醉人,爱会一点点的温馨,喜欢你,宛若夜晚的风划过脸庞,带着冷夜的微凉。我知道,等待的日子,细碎,轻寒,如云,如烟。四季轮转
初探南美(06)大洋孤岛,神秘巨像,地球之脐复活节岛(上)神秘复活节岛,奇异巨大石像,第一次通过杂志接触到它,还是少年不知愁滋味的岁月,那时它带给我的震撼和神秘感,至今回想还历历在目。是什么人用怎样的信念,在这孤悬大洋深处的荒凉小岛上,支
达米恩李准绝杀是太阳之幸还是不幸?主场一度落后独行侠22分,看上去悲剧又要在太阳身上重演了。或者说,他们还没从去年抢七落败的阴霾中走出来。幸好他们没有放弃,达米恩李在最后时刻失去平衡的情况下命中中投,达米恩李准绝杀