java中yield语句_Java线程让步yield用法实例分析

本文实例讲述了Java线程让步yield用法。分享给大家供大家参考,具体如下:

一 点睛

yield()方法是一个和sleep()方法有点类似的方法,它是Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是让线程转入就绪状态。yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,完全可能的情况是:当某个线程调用了yield()方法后,线程调度器又将其调度出来重新执行。

当某个线程调用了yield方法暂停之后,只有优先级与当前线程相同,或者优先级比当前线程更高的处于就绪状态的线程才会获得执行的机会。

二 代码

public class YieldTest extends Thread

{

public YieldTest(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

{

// 启动两条并发线程

YieldTest yt1 = new YieldTest("高级");

// 将ty1线程设置成最高优先级

//yt1.setPriority(Thread.MAX_PRIORITY);

yt1.start();

YieldTest yt2 = new YieldTest("低级");

// 将yt2线程设置成最低优先级

//yt2.setPriority(Thread.MIN_PRIORITY);

yt2.start();

}

}

三 运行

......

低级  18

低级  19

高级  15

低级  20

高级  16

高级  17

高级  18

高级  19

低级  21

高级  20

低级  22

低级  23

低级  24

低级  25

低级  26

...

四 说明

1 此时高级和低级两个线程优先级一样。

2 线程调用yield之后将执行机会让给优先级相同的其他线程。

五 代码2

public class YieldTest extends Thread

{

public YieldTest(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

{

// 启动两条并发线程

YieldTest yt1 = new YieldTest("高级");

// 将ty1线程设置成最高优先级

yt1.setPriority(Thread.MAX_PRIORITY);

yt1.start();

YieldTest yt2 = new YieldTest("低级");

// 将yt2线程设置成最低优先级

yt2.setPriority(Thread.MIN_PRIORITY);

yt2.start();

}

}

六 运行2

高级  17

高级  18

高级  19

高级  20

高级  21

高级  22

高级  23

高级  24

高级  25

高级  26

高级  27

高级  28

......

高级  48

高级  49

低级  12

低级  13

低级  14

低级  15

低级  16

低级  17

低级  18

低级  19

低级  20

低级  21

低级  22

低级  23

七 说明2

1 两个线程的优先级不同。

2 高优先级的线程调用yield方法暂停之后,系统没有与之优先级相同,或更高优先级的线程,所以该线程继续执行。

希望本文所述对大家java程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值