yield
public static void yield()
- 暂停当前正在执行的线程对象,并执行其他线程。
-
-
sleep
public static void sleep(long millis) throws InterruptedException
- 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。
-
-
-
参数:
millis
- 以毫秒为单位的休眠时间。
package com.icss.biz.ppt;
/**
* yield: 暂停当前正在执行的线程对象,并执行其他线程
* @author xiaohp
*
*/
public class YieldThread implements Runnable{
private Integer x=0;
@SuppressWarnings("static-access")
public void run() {
for(int i=0;i<50;i++){
Thread.currentThread().yield(); //注释此句,其它线程可能无法抢入,如果注释掉就可能是
System.out.println("线程ID" + Thread.currentThread().getId()+" :x="+x);
x++;
}
}
public static void main(String[] args) {
YieldThread yt = new YieldThread();
new Thread(yt).start();
new Thread(yt).start();
}
}
Thread.currentThread().yield(); //注释此句,其它线程可能无法抢入,如果注释掉就可能是一个线程抢夺了资源一直占用,但是去掉注释后就是2个线程差不多平均分配
而sleep是让一个线程等一会,不会被其他线程抢去资源。