,,Java使用sleep方法暂停线程Thread

,,Java使用sleep方法暂停线程Thread

本文介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: