请教一个多线程yield()的问题

boooch 2010-07-03 03:35:48
代码如下:

public class TestYield extends Thread
{
public TestYield()
{
}
public TestYield(String name)
{
super(name);
}
//定义run方法作为线程执行体
public void run()
{
for (int i = 0; i < 50 ; i++ )
{
System.out.println(getName() + " " + i);
//当i等于20时,使用yield方法让当前线程让步
if (i == 20)
{
Thread.yield();
}
}
}
public static void main(String[] args) throws Exception
{
//启动两条并发线程
TestYield ty1 = new TestYield("高级");
//将ty1线程设置成最高优先级
ty1.setPriority(Thread.MAX_PRIORITY);
ty1.start();

TestYield ty2 = new TestYield("低级");
//将ty1线程设置成最低优先级
ty2.setPriority(Thread.MIN_PRIORITY);
ty2.start();
}
}



运行结果如下:

高级 0
高级 1
高级 2
高级 3
高级 4
高级 5
高级 6
高级 7
高级 8
高级 9
高级 10
高级 11
高级 12
高级 13
高级 14
高级 15
高级 16
高级 17
高级 18
高级 19
高级 20
低级 0

低级 1
低级 2
高级 21
高级 22
高级 23
高级 24
高级 25
高级 26
高级 27
高级 28
高级 29
高级 30
高级 31
高级 32
高级 33
高级 34
高级 35
高级 36
高级 37
高级 38
高级 39
高级 40
高级 41
高级 42
高级 43
高级 44
高级 45
高级 46
高级 47
高级 48
高级 49
低级 3
低级 4
低级 5
低级 6
低级 7
低级 8
低级 9
低级 10
低级 11
低级 12
低级 13
低级 14
低级 15
低级 16
低级 17
低级 18
低级 19
低级 20
低级 21
低级 22
低级 23
低级 24
低级 25
低级 26
低级 27
低级 28
低级 29
低级 30
低级 31
低级 32
低级 33
低级 34
低级 35
低级 36
低级 37
低级 38
低级 39
低级 40
低级 41
低级 42
低级 43
低级 44
低级 45
低级 46
低级 47
低级 48
低级 49


我的疑问是:为什么优先级高的执行到yield()方法之后,反而将cpu让给了低优先级的,按照yield的规则,不是只能让给比自己高优先级或同级的线程吗?
请高手指点一下。
...全文
37 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhongyi188 2010-07-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gaoxiang519 的回复:]

只能说是你误会了,yield()方法只是使当前正在执行的线程让出cpu,至于cpu要选哪个线程是java无法干涉的,它在选择的时候会依据优先级,优先级高的线程被选中的几率高,但并不一定是选择优先级高的。
你的程序总共就只有2个线程,高级的那个让出了cpu,当然是低级的上咯。
[/Quote]

up
gaoxiang519 2010-07-03
  • 打赏
  • 举报
回复
只能说是你误会了,yield()方法只是使当前正在执行的线程让出cpu,至于cpu要选哪个线程是java无法干涉的,它在选择的时候会依据优先级,优先级高的线程被选中的几率高,但并不一定是选择优先级高的。
你的程序总共就只有2个线程,高级的那个让出了cpu,当然是低级的上咯。
神之泪花 2010-07-03
  • 打赏
  • 举报
回复
多线程还是用不太好,友情帮顶了
qingzhe2008 2010-07-03
  • 打赏
  • 举报
回复
路过,帮顶。。。。。。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧