public class TestThreadYield {
public static void main(String [] args){
Mythread3 t1 = new Mythread3("luxideyao");
Mythread3 t2 = new Mythread3("feifan");
t1.start();
t2.start();
}
}class Mythread3 extends Thread{
Mythread3 (String s){
super(s);
}

public void run(){
for(int i = 0; i <100;  i ++){
System.out.println("i am thread=====" + getName() + i);

if (i % 10 ==0){
yield();//线程间的切换
}
}
}
}

上面是我的代码,下面是我运行的结果,请问为什么不能在i被10整除是实现线程的切换
i am thread=====luxideyao0
i am thread=====feifan0
i am thread=====luxideyao1
i am thread=====feifan1
i am thread=====luxideyao2
i am thread=====feifan2
i am thread=====feifan3
i am thread=====feifan4
i am thread=====feifan5
i am thread=====feifan6
i am thread=====feifan7
i am thread=====feifan8
i am thread=====feifan9
i am thread=====feifan10
i am thread=====feifan11
i am thread=====feifan12
i am thread=====feifan13
i am thread=====feifan14
i am thread=====feifan15
i am thread=====feifan16
i am thread=====feifan17
i am thread=====feifan18
i am thread=====feifan19
i am thread=====feifan20
i am thread=====feifan21
i am thread=====feifan22
i am thread=====feifan23
i am thread=====feifan24
i am thread=====feifan25
i am thread=====feifan26
i am thread=====feifan27
i am thread=====feifan28
i am thread=====feifan29
i am thread=====feifan30
i am thread=====feifan31
i am thread=====feifan32
i am thread=====feifan33
i am thread=====feifan34
i am thread=====feifan35
i am thread=====feifan36
i am thread=====feifan37
i am thread=====feifan38
i am thread=====luxideyao3
i am thread=====feifan39
i am thread=====luxideyao4
i am thread=====feifan40
i am thread=====luxideyao5
i am thread=====feifan41
i am thread=====luxideyao6
i am thread=====feifan42
i am thread=====luxideyao7
i am thread=====feifan43
i am thread=====luxideyao8
i am thread=====luxideyao9
i am thread=====luxideyao10
i am thread=====luxideyao11
i am thread=====luxideyao12
i am thread=====luxideyao13
i am thread=====luxideyao14
i am thread=====luxideyao15
i am thread=====luxideyao16
i am thread=====luxideyao17
i am thread=====luxideyao18
i am thread=====luxideyao19
i am thread=====luxideyao20
i am thread=====luxideyao21
i am thread=====luxideyao22
i am thread=====luxideyao23
i am thread=====luxideyao24
i am thread=====luxideyao25
i am thread=====luxideyao26
i am thread=====luxideyao27
i am thread=====luxideyao28
i am thread=====luxideyao29
i am thread=====luxideyao30
i am thread=====luxideyao31
i am thread=====luxideyao32
i am thread=====luxideyao33
i am thread=====luxideyao34
i am thread=====luxideyao35
i am thread=====luxideyao36
i am thread=====luxideyao37
i am thread=====luxideyao38
i am thread=====luxideyao39
i am thread=====luxideyao40
i am thread=====feifan44
i am thread=====feifan45
i am thread=====luxideyao41
i am thread=====luxideyao42
i am thread=====luxideyao43
i am thread=====luxideyao44
i am thread=====luxideyao45
i am thread=====luxideyao46
i am thread=====luxideyao47
i am thread=====luxideyao48
i am thread=====luxideyao49
i am thread=====luxideyao50
i am thread=====luxideyao51
i am thread=====luxideyao52
i am thread=====luxideyao53
i am thread=====luxideyao54
i am thread=====luxideyao55
i am thread=====luxideyao56
i am thread=====luxideyao57
i am thread=====luxideyao58
i am thread=====luxideyao59
i am thread=====luxideyao60
i am thread=====luxideyao61
i am thread=====luxideyao62
i am thread=====luxideyao63
i am thread=====luxideyao64
i am thread=====luxideyao65
i am thread=====luxideyao66
i am thread=====luxideyao67
i am thread=====luxideyao68
i am thread=====luxideyao69
i am thread=====luxideyao70
i am thread=====luxideyao71
i am thread=====luxideyao72
i am thread=====luxideyao73
i am thread=====feifan46
i am thread=====luxideyao74
i am thread=====luxideyao75
i am thread=====luxideyao76
i am thread=====luxideyao77
i am thread=====luxideyao78
i am thread=====luxideyao79
i am thread=====luxideyao80
i am thread=====luxideyao81
i am thread=====luxideyao82
i am thread=====luxideyao83
i am thread=====luxideyao84
i am thread=====luxideyao85
i am thread=====luxideyao86
i am thread=====luxideyao87
i am thread=====luxideyao88
i am thread=====luxideyao89
i am thread=====luxideyao90
i am thread=====luxideyao91
i am thread=====luxideyao92
i am thread=====luxideyao93
i am thread=====luxideyao94
i am thread=====luxideyao95
i am thread=====luxideyao96
i am thread=====luxideyao97
i am thread=====luxideyao98
i am thread=====feifan47
i am thread=====luxideyao99
i am thread=====feifan48
i am thread=====feifan49
i am thread=====feifan50
i am thread=====feifan51
i am thread=====feifan52
i am thread=====feifan53
i am thread=====feifan54
i am thread=====feifan55
i am thread=====feifan56
i am thread=====feifan57
i am thread=====feifan58
i am thread=====feifan59
i am thread=====feifan60
i am thread=====feifan61
i am thread=====feifan62
i am thread=====feifan63
i am thread=====feifan64
i am thread=====feifan65
i am thread=====feifan66
i am thread=====feifan67
i am thread=====feifan68
i am thread=====feifan69
i am thread=====feifan70
i am thread=====feifan71
i am thread=====feifan72
i am thread=====feifan73
i am thread=====feifan74
i am thread=====feifan75
i am thread=====feifan76
i am thread=====feifan77
i am thread=====feifan78
i am thread=====feifan79
i am thread=====feifan80
i am thread=====feifan81
i am thread=====feifan82
i am thread=====feifan83
i am thread=====feifan84
i am thread=====feifan85
i am thread=====feifan86
i am thread=====feifan87
i am thread=====feifan88
i am thread=====feifan89
i am thread=====feifan90
i am thread=====feifan91
i am thread=====feifan92
i am thread=====feifan93
i am thread=====feifan94
i am thread=====feifan95
i am thread=====feifan96
i am thread=====feifan97
i am thread=====feifan98
i am thread=====feifan99

解决方案 »

  1.   

    但是这种thread.yield() 调用,并不保证下一个运行的线程就一定不是该线程.
    换成sleep(),效果才明显。
      

  2.   

    sleep()方法我使用过了还是没有用的。有没有更好的办法?
      

  3.   

    yield()方法可以使正在运行的线程放弃当前分得的cpu时间,但是不会使线程阻塞,即线程仍处于可执行状态,随时可能再次分得cpu时间。调用yield()方法的效果相当于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
    注意:线程优先级策略,是线程调度执行的依据。Java将线程优先级氛围10个等级,数字越大表明线程的级别越高。
    public class ThreadYield extends Thread { public ThreadYield() {
    super();
    }

    public ThreadYield(String name) {
    super(name);
    }

    public void run() {
    for (int i = 0; i < 10; i ++) {
    try {
    Thread.sleep(2000);
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println(this.getName() + i);
    }
    }

    public static void main(String[] args) {
    ThreadYield ty1 = new ThreadYield("H_J_T");
    ThreadYield ty2 = new ThreadYield("X_J_P");
    ty1.setPriority(2); // 设置优先级
    ty2.setPriority(6);
    ty2.yield();
    ty1.start();
    ty2.start();
    }
     
    }