线程,yield()

一、定义:暂停当前正在执行的线程对象,并执行其他线程

yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。
因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。
但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中

yield()将导致线程从运行状态转到可运行状态,但有可能没有效果

二、例子

                           class ThreadYield extends Thread{
                            public ThreadYield(String name) {
                                super(name);
                            }
                         
                            @Override
                            public void run() {
                                for (int i = 1; i <= 50; i++) {
                                    System.out.println("" + this.getName() + "-----" + i);
                                    // 当i为30时,该线程就会把CPU时间让掉,让其他或者自己的线程执行(也就是谁先抢到谁执行)
                                    if (i ==30) {
                                        this.yield();
                                    }
                                }
                        	
                        }
                        }
                         
                        public class Main {
                         
                        	public static void main(String[] args) {
                        		
                        		ThreadYield yt1 = new ThreadYield("张三");
                            	ThreadYield yt2 = new ThreadYield("李四");
                                yt1.start();
                                yt2.start();
                        	}
                         
                        }

          运行结果:

                  第一种情况:李四(线程)当执行到30时会CPU时间让掉,这时张三(线程)抢到CPU时间并执行。

                  第二种情况:李四(线程)当执行到30时会CPU时间让掉,这时李四(线程)抢到CPU时间并执行。
posted @ 2021-12-05 14:58  jock_javaEE  阅读(128)  评论(0编辑  收藏  举报