首页 > 试题广场 >

下面说法正确的是?()

[不定项选择题]
下面说法正确的是?()
  • 调用Thread的sleep()方法会释放锁,调用wait()方法不释放锁
  • 一个线程调用yield方法,可以使具有相同优先级线程获得处理器
  • 在Java中,高优先级的可运行的线程会抢占低优先级线程的资源
  • java中,线程可以调用yield方法使比自己低优先级的线程运行
还记得马老师说过,yiled方法属于高风亮节的行为,这个坑位我不上了,后面跟我同级别的先上厕所。这样比较好记!
高优先级的就是你们的县长,县长要上厕所,对不起,你得出来,县长先上,县长上完了,CPU分配到你了,你才能继续拉X。
编辑于 2019-07-19 10:50:57 回复(59)
yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会。因此,使用yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。
发表于 2019-03-26 19:01:28 回复(6)
睡觉是抱着锁睡觉的
发表于 2020-03-18 16:13:26 回复(9)
sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方***让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态,请参考第66题中的线程状态转换图)。wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。
发表于 2019-08-28 11:07:30 回复(0)
wait():等待时线程别人可以用。
sleep():等待时线程还是自己的,别人不能用。
yield():释放锁,同优先级的其他线程有机会获得锁。
Java中wait()、sleep()、yield()方法的区别:http://www.jianshu.com/p/25e959037eed
发表于 2020-06-19 11:36:13 回复(3)
C选项是正确的吗?各位兄台,仔细看题,他说在Java中高优先级的可运行线程会抢占低优先级线程的资源,那如果此时低优先级的线程正在运行,这时候高优先级的线程只能等待了,没有"抢"这一说吧
发表于 2020-05-24 16:01:50 回复(5)
补充一点,应该是让优先级大于等于的其他线程获得同等运行的机会,具体是谁抢到就说不定了。或者说使用yield()就是使自己和优先级大于等于自己的线程回到同一起跑线,然后就不能保证谁一定跑得快到达终点获得执行权了。
发表于 2020-03-25 00:02:44 回复(0)
yield方法只是使当前线程从运行状态进入就绪状态,然后和所有就绪状态的线程重新竞争CPU至于其他线程能否抢到CPU是未知的,所以也有可能该线程yield之后,又抢到了CPU。
发表于 2019-07-21 12:26:42 回复(0)
sleep()会抱着锁睡觉,wait会把锁释放
yield()让有相同优先级的线程之间能够适当的轮换执行
发表于 2021-12-08 14:26:15 回复(0)
Thread.yeld()方法将当前线程切换到可运行状态,然后所有线程再次竞争执行权。优先级高的线程获得执行权的概率大,但是不表示概率低的线程就一定无法获得执行权。


发表于 2020-08-21 10:14:38 回复(5)
sleep()方法没有释放锁,而wait()方法释放了锁,使其他线程可以使用同步控制块或同步方法
发表于 2019-09-24 10:50:39 回复(0)
线程
发表于 2022-02-10 00:33:30 回复(0)
Thread.sleep()不会释放占有的锁,Object.wait()会释放占有的锁。
发表于 2021-09-13 21:03:05 回复(0)
sleep是thread类的方法,保持锁,不占用cpu。 wait是object类函数,释放锁,回到线程池,等待notify唤醒。 yeild高风亮节。你先你先。高优先级就是我高我牛逼,低优先级不行0。
编辑于 2021-12-29 08:26:25 回复(0)
yield,是让CPU,而不是抢占CPU。是让出CPU,让同优先级的其他线程先获得处理器。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。
发表于 2022-04-21 20:41:08 回复(0)

对静态方法Thread.yield()的调用说明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行。

该方法只是对线程调度器的一个建议,而且也只是建议【具有相同优先级的其它线程】可以运行。

编辑于 2022-04-12 22:58:39 回复(0)
yeid()方***放弃CPU资源,锁资源不会放弃的。但是当同步代码执行完毕,资源锁自然就释放了。
发表于 2022-03-02 21:41:57 回复(0)
java的抢占式调度,好像是高优先级比低优先级分配到更多的cpu资源。
发表于 2021-09-10 09:43:38 回复(0)
yield方法仅礼让和自己同级别的线程。
发表于 2021-07-23 19:25:12 回复(0)
要注意的是,yield方法是让出cpu资源,再次竞争资源,也就是说,不一定就能保证同样优先级的另一个线程先执行!
发表于 2021-05-09 11:06:26 回复(0)