上QQ阅读APP看书,第一时间看更新
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.java,则执行代码:
Thread.sleep(3000); this.sleep(3000);
效果是一样的。
如果调用sleep()方法所在的类不是Thread.java,则必须使用如下代码实现暂停功能:
Thread.sleep(3000);
因为类中没有提供sleep()方法,所以不能使用this.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()); } }
图1-32 将main线程暂停2秒
直接调用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线程是后运行的,在最后两行间隔了2秒输出run begin和run end相关的信息。