sleep与yield

来源:互联网 发布:关键词排名优化小技巧 编辑:程序博客网 时间:2024/06/07 02:47

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是让一个线程等一会,不会被其他线程抢去资源。

原创粉丝点击