本文介绍了Java使用sleep方法来挂起线程,并通过示例代码进行了详细介绍。对大家的学习或工作都有一定的参考价值。让我们和边肖一起为有需要的朋友学习吧。
为什么要用睡眠?主要是暂停当前线程,把cpu碎片让给其他线程,减缓当前线程的执行速度。
方法的定义:
公共静态无效睡眠(长毫);
public static native void sleep(long millis)抛出InterruptedException
从定义上可以看出,sleep方法是一个本地方法,通过系统调用挂起当前线程,而不是由java自己实现。
Sleep也有一个重载方法:
公共静态无效睡眠(长毫秒,毫微秒)
实现如下:
公共静态无效睡眠(长毫秒,毫微秒)
引发中断的异常{
if(毫秒0) {
抛出new IllegalArgumentException(“超时值为负”);
}
if (nanos 0 || nanos 999999) {
抛出新的IllegalArgumentException(
纳秒超时值超出范围’);
}
if (nanos=500000 || (nanos!=0毫秒==0)) {
米利斯;
}
睡眠(毫秒);
}
这种方法表面上支持纳秒级的暂定,但内部实现还是毫秒级的执行,以50万纳秒为划分。当它大于这个值时,线程将比毫秒多休眠1毫秒,否则它仍将休眠1毫秒。当然,如果millis为0,它会休眠1毫秒。
编写一个简单的演示来查看线程的执行情况:
导入Java . util . concurrent . locks . lock;
导入Java . util . concurrent . locks . reentrant lock;
公共类ThreadTest实现Runnable{
公共静态void main(String[] args)引发InterruptedException {
Thread test1=新线程(new ThreadTest());
Thread test 2=new Thread(new ThreadTest());
test1 . start();
test 2 . start();
test1 . sleep(5000);
}
@覆盖
公共无效运行(){
for(int I=0;i5;i ){
system . out . println(I);
}
}
}
执行结果:
0
一个
2
三
四
0
一个
2
三
四
//这里会有5秒钟的停顿
结束
值得注意的是:
1.睡眠是帮助其他线程获得运行机会的最佳方式,但如果当前线程获得锁,睡眠不会放弃锁。
2.线程在睡眠到期时自动唤醒,并返回到可运行状态(就绪),而不是运行状态。
3.优先级线程的调用现在唤醒后不会在内部执行,所以sleep()中指定的时间是线程不会运行的最短时间,sleep方法不能作为精确的时间控制。
3.sleep()是一个静态方法,只能控制当前运行的线程(这个例子就是这么调用的,因为类对象可以调用类的静态方法)。
关于Java使用sleep方法挂起线程的这篇文章到此为止。希望对大家的学习有帮助,也希望大家多多支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。