Thread.field():field()的作用是“为线程让步”,就是当一个线程使用了这个方法后,该线程就会把自己的CPU执行的时间让掉,让自己或者其他的线程执行,注意的就是让自己或者其他线程运行,并不是单纯的让给其他线程。
yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!
但是线程是有优先级的,优先级越高的人,就一定能第一个上车吗?这是不一定的,优先级高的人仅仅只是第一个上车的概率大了一点而已,
最终第一个上车的,也有可能是优先级最低的人。并且所谓的优先级执行,是在大量执行次数中才能体现出来的。
public class FieldThreadTest {
public static void main(String[] args) {
Thread threada = new ThreadA();
Thread threadb = new ThreadB();
// 设置优先级:MIN_PRIORITY最低优先级1;NORM_PRIORITY普通优先级5;MAX_PRIORITY最高优先级10
threada.setPriority(Thread.MIN_PRIORITY);
threadb.setPriority(Thread.MAX_PRIORITY);
threada.start();
threadb.start();
}
}
class ThreadA extends Thread {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("ThreadA--" + i);
Thread.yield();
}
}
}
class ThreadB extends Thread {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("ThreadB--" + i);
Thread.yield();
}
}
}
结果有多种可能:
ThreadA--0
ThreadB--0
ThreadA--1
ThreadB--1
ThreadA--2
ThreadB--2
ThreadA--3
ThreadB--3
ThreadA--4
ThreadB--4
ThreadA--5
ThreadB--5
ThreadA--6
ThreadB--6
ThreadA--7
ThreadB--7
ThreadA--8
ThreadB--8
ThreadA--9
ThreadB--9
或:
ThreadA--0
ThreadA--1
ThreadB--0
ThreadA--2
ThreadA--3
ThreadA--4
ThreadA--5
ThreadA--6
ThreadA--7
ThreadA--8
ThreadA--9
ThreadB--1
ThreadB--2
ThreadB--3
ThreadB--4
ThreadB--5
ThreadB--6
ThreadB--7
ThreadB--8
ThreadB--9
等等