java线程中的yield
来源:互联网 发布:罗马2全面战争修改数据 编辑:程序博客网 时间:2024/06/05 10:46
今天看老外的代码,里面用到了yield,以前很少用这个方法,所以补充一下yield的知识,下面是网上找的测试代码:
public class TestYield {public static void main(String[] args) {MyThread3 t1 = new MyThread3("t1");MyThread3 t2 = new MyThread3("t2");t1.start();t2.start();}}class MyThread3 extends Thread {public MyThread3(String s) {super(s);}public void run() {for (int i = 1; i < 100; i++) {System.out.println(getName() + "=" + i);if (i % 10 == 0) {yield();}}}}
代码出自:http://hi.baidu.com/gaozerd/item/5a1a6bc873c05f0cad092f51
里面有句话说:每到10的倍数的时候,就会切换线程。
其实不然,我亲测了一下,结果如下:
t1=1t2=1t1=2t2=2t1=3t2=3t1=4t2=4t1=5t2=5t2=6t2=7t2=8t2=9t2=10t2=11t2=12t2=13t2=14t2=15t2=16t2=17t2=18t2=19t2=20t2=21t2=22t1=6t2=23t1=7t2=24t1=8t2=25t1=9t2=26t1=10t2=27
.
.
并不是说,每到10的倍数的时候,就会切换线程。
看看API的解释吧。
public static void yield() 暂停当前正在执行的线程对象,并执行其他线程。
API的解释也让人摸不着头脑,按理说t2=10,t2=20时应该切换到t1啊,可是结果并不是这样的。
又baidu了一下,有人说yield是让当前线程回到可运行状态,这个解释很合理。
http://miles801.blog.163.com/blog/static/174979588201106115211936/
yield的真正用途是:使当前线程从执行态变为可执行态,也就是就绪态吧。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次不会执行到了。
如果我想达到10的倍数的时候就会切换线程该怎么做呢?
interrupt(); 还靠点谱,不过实现几次还是有问题,不能100%切换。
以后再想想其他办法吧。今天先到这里。
0 0
- java线程中的yield
- Java中的线程让步Thread.yield()
- Java线程中的join和yield
- 线程中的yield()方法
- JAVA 线程 yield
- java 线程让步(yield)
- Java中yield()和join()在线程中的不同
- JAVA 线程 yield
- Java 线程 | yield() 和 join()
- 详解Java中的线程让步yield()与线程休眠sleep()方法
- 线程中的start、join、sleep、yield方法
- java线程的sleep(),wait(),notify(),yield();
- Java 线程的sleep和yield方法
- Java多线程-线程状态、sleep()、yield()、join()
- java线程yield的基本用法
- java基础:线程方法之yield方法
- java线程研究---(5)暂停Thread:yield
- java 线程中yield的用法
- SQL Server 2008突然无法正常启动
- 在js中取出对象中的值
- 多文件上传
- java连接AD域
- Java封装
- java线程中的yield
- 解决hibernate order by bug
- Axis1.4+Spring
- ID重复引发的血案,按钮点击事件不起作用
- Jquery val()函数的问题
- JavaScript对象转换为原始值(字符串、数字、布尔值)的过程
- Java利用Axis远程调用WebService接口
- 嵌套函数和闭包
- 回收站被清空后如何找回文件