xl_echo编辑整理,欢迎转载,转载请声明文章来源。更多IT、编程案例、资料请联系QQ:1280023003,加群298140694。百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!
sleep
是一个静态方法,观察其源码可以看到,其中有两个重载方法,其中一个需要传入毫秒数,另外一个既需要毫秒数还需要纳秒数。
yield
这是一个将线程状态回逆的方法,主要作用是将线程从运行状态转换到就绪状态。这个方法很少使用
sleep
sleep主要的作用就是让线程沉睡,sleep方法有以下两个:
public static native void sleep(long millis) throws InterruptedException;
public static void sleep(long millis, int nanos)throws InterruptedException {
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
}
sleep(millis);
}
第一个方法参数就是只是毫秒值,参数为100,线程就休眠100毫秒;
第二个方法参数多一个纳秒值,参数为(1000,10),的时候线程就休眠1000毫秒10纳秒;
我们可以从一个例子看到这个方法的效果:
package com.example.mybatisplusdemo.test;
/**
* @Author xl_echo
* @Date 2018/8/8 上午10:53
**/
public class Test {
public static void main(String[] args) {
new Thread(() -> {
long startTime = System.currentTimeMillis();
sleep(2_000L);//2_000L 等效2000,这样在数字较大时,可读性更强
long endTime = System.currentTimeMillis();
System.out.println(Thread.currentThread().getName() + "休眠时间:" + (endTime - startTime));
}).start();
long startTime = System.currentTimeMillis();
sleep(3_000L);
long endTime = System.currentTimeMillis();
System.out.println(Thread.currentThread().getName() + "休眠时间:" + (endTime - startTime));
}
private static void sleep(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
如果休眠时间较长,可以参考TimeUnit代替Thread.sleep,代码会更优雅,而且不需要计算毫秒值了,直接设置即可。不常见,除非项目有特许要求。这里不暂时,有兴趣的朋友可以去查一下。
这里不讲解yield,所用不多,而且sleep和yield的作用是比较容易分辨的。sleep一定会使Thread进入休眠,但是yield不同,在CPU没有忽略调度提示的时候进入释放CPU让线程达到sleep相同的效果。