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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunalong 中级黑马   /  2013-7-24 16:48  /  1155 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-25 18:29 编辑

  1. import java.util.concurrent.locks.Condition;
  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;

  4. /*
  5. * yield:暂停当前正在执行的线程对象,并执行其他线程。
  6. */
  7. class YieldTest implements Runnable{
  8.         Lock lock = new ReentrantLock();
  9.         //Condition condition = lock.newCondition();
  10.         public void run(){
  11.                 for(int x=0;x<70;x++){
  12.                         lock.lock();
  13.                         System.out.println(Thread.currentThread().getName() + "---" + x);
  14.                         Thread.yield();
  15.                         lock.unlock();//为什么结果不是交替运行的?
  16.                 }
  17.         }
  18. }
  19. public class ThreadYield {
  20.         public static void main(String[] args){
  21.                 YieldTest yt = new YieldTest();
  22.                 Thread t1 = new Thread(yt);
  23.                 Thread t2 = new Thread(yt);
  24.                 t1.start();
  25.                 t2.start();
  26.                
  27.                 for(int x=0;x<70;x++)
  28.                         System.out.println("main---" + x);
  29.         }
  30. }
复制代码
线程t1,t2的结果为什么不是交替的??

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

3 个回复

倒序浏览
yield  释放执行权 . 当t1执行到这的时候,  t1释放了执行权  .  
但是 t1是释放执行权.  并不是放弃执行权.   也不是你说的 暂停现有线程来运行其他线程
当t1执行到Thread.yield();  这句的时候,  停止了当前的线程. 然后 .t1 t2 主线程三方来抢执行权.
只是加上yield之后,this的线程连续抢到执行权的几率会很小..     
我个人理解哈.    不对的话 请见谅

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
当前线程执行到yield时,释放了执行权 但是并没有 释放锁(释放锁的代码还没有执行到) 导致其他线程进不来。 只有当随机又执行到当前线程时而后进入到随机分配的模式。把  Thread.yield();
                                      lock.unlock();
换个位置。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
在线程执行到yield时,此时t1就释放了执行权,而同时并没有执行到释放锁那一步,从而使其他的线程无法进入。在执行Thread.yield(); 时,当前的线程开始被停止,所有说在t1和t2的结果不是交替。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马