理论上虚拟机和操作系统会让优先级高的的线程更多的获取执行的机会,这个不要与时间片混淆。yield的意思是放手,放弃,一个线程调用yield意味着它要告诉虚拟机自己乐意让其它线程占用自己的位置。这只是一个暗示,并不保证会产生效果(使当前线程转到可运行状态,runnable)。
看代码示例,
- class Producer extends Thread
- {
- public void run()
- {
- for(int i = 0; i < 5; i++)
- {
- System.out.println("i am producer: producerd item " + i);
- Thread.yield();
- }
- }
- }
-
- class Consumer extends Thread
- {
- public void run()
- {
- for(int i = 0; i < 5; i++)
- {
- System.out.println("i am Consumer: Consumed item " + i);
- Thread.yield();
- }
- }
- }
- public class JoinAndYieldTestDemo
- {
-
-
-
-
- public static void main(String[] args)
- {
-
- Thread producer = new Producer();
- Thread consumer = new Consumer();
-
- producer.setPriority(Thread.MIN_PRIORITY);
- consumer.setPriority(Thread.MAX_PRIORITY);
-
- producer.start();
- consumer.start();
- }
-
- }
转自: http://blog.csdn.net/pony_maggie/article/details/43897971
程序创建了名为生产者和消费者的两个线程,前者最小优先级,后者最大优先级。调用yield方法,两个线程会依次打印,然后将执行机会交给对方,一直这样进行下去。如果不加yield,结果是先打印完一个,再是另一个。
yield的作用一目了然,设置成不同的优先级,也证明了yield不会受优先级大小的影响。