A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kaka小明 中级黑马   /  2013-5-26 15:29  /  2170 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kaka小明 于 2013-5-26 18:17 编辑

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

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

倒序浏览
在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。暂停当前正在执行的线程对象,并执行其他线程。线程很多,其他线程并不一定都用这个锁啊,线程不影响安全的就没必要给加这个锁,有影响资源安全的才会用这个锁,不用这个锁的可以执行,当然是有意义的,

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
x378320002 发表于 2013-5-26 15:37
在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。暂停当前正在执行 ...

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

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

这样是否清晰了???
回复 使用道具 举报
First 发表于 2013-5-26 18:07
首先肯定不会在执行的过程中释放锁,因为一旦释放了,就不同步了,多线程问题就会产生。
其次,yield 的意 ...

多谢美女指教!I see
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马