黑马程序员技术交流社区
标题:
关于Thread中的yield方法
[打印本页]
作者:
sunalong
时间:
2013-7-24 16:48
标题:
关于Thread中的yield方法
本帖最后由 杨兴庭 于 2013-7-25 18:29 编辑
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/*
* yield:暂停当前正在执行的线程对象,并执行其他线程。
*/
class YieldTest implements Runnable{
Lock lock = new ReentrantLock();
//Condition condition = lock.newCondition();
public void run(){
for(int x=0;x<70;x++){
lock.lock();
System.out.println(Thread.currentThread().getName() + "---" + x);
Thread.yield();
lock.unlock();//为什么结果不是交替运行的?
}
}
}
public class ThreadYield {
public static void main(String[] args){
YieldTest yt = new YieldTest();
Thread t1 = new Thread(yt);
Thread t2 = new Thread(yt);
t1.start();
t2.start();
for(int x=0;x<70;x++)
System.out.println("main---" + x);
}
}
复制代码
线程t1,t2的结果为什么不是交替的??
作者:
王峰230321
时间:
2013-7-24 18:45
yield 释放执行权 . 当t1执行到这的时候, t1释放了执行权 .
但是 t1是释放执行权. 并不是放弃执行权. 也不是你说的 暂停现有线程来运行其他线程
当t1执行到Thread.yield(); 这句的时候, 停止了当前的线程. 然后 .t1 t2 主线程三方来抢执行权.
只是加上yield之后,this的线程连续抢到执行权的几率会很小..
我个人理解哈. 不对的话 请见谅
作者:
yangqing
时间:
2013-7-24 19:27
当前线程执行到yield时,释放了执行权 但是并没有 释放锁(释放锁的代码还没有执行到) 导致其他线程进不来。 只有当随机又执行到当前线程时而后进入到随机分配的模式。把 Thread.yield();
lock.unlock();
换个位置。
作者:
黑马龙子
时间:
2013-7-25 19:44
在线程执行到yield时,此时t1就释放了执行权,而同时并没有执行到释放锁那一步,从而使其他的线程无法进入。在执行Thread.yield(); 时,当前的线程开始被停止,所有说在t1和t2的结果不是交替。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2