黑马程序员技术交流社区

标题: 多线程小问题 [打印本页]

作者: kaka小明    时间: 2013-5-26 15:29
标题: 多线程小问题
本帖最后由 kaka小明 于 2013-5-26 18:17 编辑

线程中的yield()方法出让cpu执行权,会不会释放锁呢?如果不释放锁的话,是不是对有同样锁需求的线程而言,这个“出让”就没有意义了?求各位牛牛解释哈!

作者: x378320002    时间: 2013-5-26 15:37
在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。暂停当前正在执行的线程对象,并执行其他线程。线程很多,其他线程并不一定都用这个锁啊,线程不影响安全的就没必要给加这个锁,有影响资源安全的才会用这个锁,不用这个锁的可以执行,当然是有意义的,
作者: kaka小明    时间: 2013-5-26 16:21
x378320002 发表于 2013-5-26 15:37
在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。暂停当前正在执行 ...

也就是说,线程出让,锁没有释放,所以执行权只是出让给没有相同锁需求的、优先级相同且更高的线程了,是这么回事吗?
作者: 王靖远    时间: 2013-5-26 17:34
这个问题没考虑过,坐等高手来解答啊。
作者: First    时间: 2013-5-26 18:07
本帖最后由 First 于 2013-5-26 18:08 编辑

首先肯定不会在执行的过程中释放锁,因为一旦释放了,就不同步了,多线程问题就会产生。
其次,yield 的意义在于当一个线程执行完一次synchronized 代码块时,会临时释放执行权,减缓线程运行 有助于平均 运行效果。 即 释放执行权,而不是锁。所以同一个锁的不同线程意义才更显得突出。

这样是否清晰了???
作者: kaka小明    时间: 2013-5-26 18:16
First 发表于 2013-5-26 18:07
首先肯定不会在执行的过程中释放锁,因为一旦释放了,就不同步了,多线程问题就会产生。
其次,yield 的意 ...

多谢美女指教!I see




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2