《Java多线程编程核心技术(第2版)》 —1.5 sleep(long millis)方法
1.5 sleep(long millis)方法
sleep()方法的作用是在指定的时间(毫秒)内让当前“正在执行的线程”休眠(暂停执行),这个“正在执行的线程”是指this.currentThread()返回的线程。
下面通过一个示例进行说明。创建项目t8项目,类MyThread1.java代码如下:
public class MyThread1 extends Thread {
@Override
public void run() {
try {
System.out.println("run threadName="
+ this.currentThread().getName() + " begin");
Thread.sleep(2000);
System.out.println("run threadName="
+ this.currentThread().getName() + " end");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果调用sleep()方法所在的类是Thread,则执行代码:
Thread.sleep(3000);
this.sleep(3000);
效果是一样的。
如果调用sleep()方法所在的类不是Thread,则必须使用代码:
Thread.sleep(3000);
实现暂停的功能。
运行类Run1.java代码如下:
public class Run1 {
public static void main(String[] args) {
MyThread1 mythread = new MyThread1();
System.out.println("begin =" + System.currentTimeMillis());
mythread.run();
System.out.println("end =" + System.currentTimeMillis());
}
}
直接调用run()方法,程序运行结果如图1-32所示。
继续实验,创建MyThread2.java代码如下:
public class MyThread2 extends Thread {
@Override
public void run() {
try {
System.out.println("run threadName="
+ this.currentThread().getName() + " begin ="
+ System.currentTimeMillis());
Thread.sleep(2000);
System.out.println("run threadName="
+ this.currentThread().getName() + " end ="
+ System.currentTimeMillis());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
创建Run2.java代码如下:
public class Run2 {
public static void main(String[] args) {
MyThread2 mythread = new MyThread2();
System.out.println("begin =" + System.currentTimeMillis());
mythread.start();
System.out.println("end =" + System.currentTimeMillis());
}
}
使用start()方法启动线程,程序运行结果如图1-33所示。
图1-33 程序运行结果
由于main线程与MyThread2线程是异步执行的,所以首先输出的信息为begin和end,而MyThread2线程后运行的,在最后两行间隔了2s输出run … begin和run … end相关的信息。
- 点赞
- 收藏
- 关注作者
评论(0)