Java教程-Java中的Thread.sleep()方法及示例

Java中的Thread.sleep()方法及示例
Java的Thread类提供了两个版本的sleep()方法。第一个版本只接受一个参数,而另一个版本接受两个参数。sleep()方法被用于暂停线程的工作一段给定的时间。线程停留在睡眠状态的时间被称为线程的睡眠时间。睡眠时间结束后,线程从离开的地方开始执行。
sleep()方法的语法:
下面是sleep()方法的语法。
public static void sleep(long mls) throws InterruptedException
public static void sleep(long mls, int n) throws InterruptedException
sleep()方法的一个参数版本是本地方法,其实现是在另一种编程语言中完成的。而具有两个参数的其他方法不是本地方法,即其实现是在Java中完成的。我们可以通过Thread类来访问sleep()方法,因为sleep()方法的签名包含了static关键字。无论是本地方法还是非本地方法都会抛出一个受检查的异常。因此,在这里可以使用try-catch块或throws关键字。
Thread.sleep()方法可以与任何线程一起使用。这意味着任何其他线程或主线程都可以调用sleep()方法。
参数:
sleep()方法使用了以下参数。
mls:参数mls表示以毫秒为单位的时间。方法sleep()给出了线程休眠的持续时间。
n:它表示程序员或开发人员希望线程保持睡眠状态的额外时间。n的范围是从0到999999。
该方法不返回任何内容。
关于sleep()方法的重要注意事项
无论何时执行Thread.sleep()方法,它总是会暂停当前线程的执行。
如果在当前线程已经处于睡眠模式时另一个线程进行了中断,则会抛出InterruptedException异常。
如果执行线程的系统负载较高,则线程的实际睡眠时间通常比参数中传递的时间长。然而,如果执行sleep()方法的系统负载较轻,则线程的实际睡眠时间几乎等于参数中传递的时间。
Java中sleep()方法的示例:在自定义线程上使用
以下示例演示了如何在自定义线程上使用sleep()方法。
文件名:TestSleepMethod1.java
class TestSleepMethod1 extends Thread{
public void run(){
for(int i=1;i<5;i++){
// 线程将休眠 500 毫秒
try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[]){
TestSleepMethod1 t1=new TestSleepMethod1();
TestSleepMethod1 t2=new TestSleepMethod1();
t1.start();
t2.start();
}
}
输出:
1
1
2
2
3
3
4
4
正如您所了解的,一次只能执行一个线程。如果您将一个线程睡眠指定的时间,线程调度器会选择另一个线程,依此类推。
Java中sleep()方法的示例:在主线程上使用
文件名:TestSleepMethod2.java
//重要的导入语句
import java.lang.Thread;
import java.io.*;
public class TestSleepMethod2
{
// 主要方法
public static void main(String argvs[])
{
try {
for (int j = 0; j < 5; j++)
{
// 主线程休眠 1000 毫秒,即 1 秒
// 每当循环运行时
Thread.sleep(1000);
// 显示变量的值
System.out.println(j);
}
}
catch (Exception expn)
{
// 捕获异常
System.out.println(expn);
}
}
}
输出:
0
1
2
3
4
Java中sleep()方法的示例:当睡眠时间为负数时
以下示例在睡眠时间为负数时抛出IllegalArgumentException异常。
文件名:TestSleepMethod3.java
// 重要的导入语句
import java.lang.Thread;
import java.io.*;
public class TestSleepMethod3
{
// 主要方法
public static void main(String argvs[])
{
// 我们也可以使用 throws 关键字后跟
// 抛出异常的异常名称
try
{
for (int j = 0; j < 5; j++)
{
// 它抛出异常 IllegalArgumentException
// 因为时间是 -ive 即 -100
Thread.sleep(-100);
// 显示变量的值
System.out.println(j);
}
}
catch (Exception expn)
{
// 异常在这里被捕获
System.out.println(expn);
}
}
}
输出:
java.lang.IllegalArgumentException: timeout value is negative