关于java多线程的yield()和sleep()算法

学了多线程,发现yield()方法没什么用,即便使用也不会直观影响线程的调用顺序,而sleep()也在传入参数比较大时才会使得线程调用顺序明显,各位有经验的程序猿平时多线程一般怎么理解和使用这两个方法啊。

2个回答

sleep 方法顾名思义是睡眠的意思,用这个词来理解是最好不过了,sleep可以指定线程睡眠多长时间再继续运行,通过传入的参数指定睡眠时间,通过该
方法进行睡眠的线程并不会让出执行权,也就是不会让出空间给别的线程执行,(例子:占着茅坑拉屎但是睡着了,占着厕所)
yield 是礼让方法就是将执行权礼让给其他线程,但是礼让多少时间这个是按具体情况而定的。
(例子,我在等厕所里了,但是有个人非常急,我就礼让给他先用,但是不一定他在执行我就一定得等,我想着不爽可以去别的厕所,也可以把你拉出来)

ios_king
果冻剑客 回复dema666: 你说到了sleep 就执行另一个线程,那你都睡觉了,难道别的线程会跟着你一起等吗?当然先执行了,除非你睡的时间非常短,你可以试下睡觉1毫秒。你看看会不会这种情况,感觉你对线程是异步的你都不太理解,怎么会来纠结这个问题,基础要先理解好
接近 4 年之前 回复
ios_king
果冻剑客 你说的这种情况是在睡眠时间较短暂的时候就会发生, 程序的处理速度非常之快,你看不出来差别,如果你参数设置大点的话,就可以看出来。sleep是一定要等到睡眠完成后再执行,你说的老是先执行另一个线程,那是因为yield 方法虽然是礼让,但是因为程序的执行速度快,一般礼让很短的时间就会再次执行自已了(视cpu 情况而定)
接近 4 年之前 回复
dema666
dema666 那为何,我设定2个线程,无论哪个线程先执行,到了sleep()方法就执行另一个线程的输出语句,按你说的应该是休眠完再随机才对啊而不是一定执行另一个线程
接近 4 年之前 回复

yield让出CPU,可能会给优先级较低的线程,而sleep只会让给优先级比自己高的线程的。就是这点小区别。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐