sleep()是Thread类的Static(静态)的方法,表示使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用权,目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会;
调用sleep方法一定要使用try catch语句,因为sleep方法会抛出InterruptedException异常。该异常表示当线程被打断时,该线程的停止休眠。
下面我们通过一个小程序,简单了解一下Sleep的作用。
import java.util.Date; public class TestSleep { public static void main(String[] args) { //创建并启动线程 MyThread thread = new MyThread(); thread.start(); try { //主线程沉睡10s Thread.sleep(10000); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } //打断线程 thread.interrupt(); } } class MyThread extends Thread { @Override public void run() { // TODO Auto-generated method stub while(true) { //打印系统时间 System.out.println(new Date()); try { //当前线程沉睡1S sleep(1000); } catch (InterruptedException e) { //当被打断时,结束线程 return; } } } }
我们大致来分析一下这段代码,以此观察sleep带来的效果。
main()方法中实例化MyThread并启动该线程,接着主线程继续执行,MyThread也同时执行。
主线程调用 Thread. sleep(10000)
注意是调用Thread.sleep(10000), 此方法的意思是:当前线程沉睡10s。当前线程是谁呢?我们知道main函数运行的线程,当然是主线程了。
也就是主线程被阻塞,停止运行。此时子线程继续运行,每个一秒钟打印一次系统时间。
10s中后,主线程继续运行,运行到thread.interrupt();这句代码时,子线程thread被打断,抛出InterruptedException后return了。
子线程的run函数执行完毕,子线程终止。随后主线程也终止。
看到的效果就是子线程打印10次系统时间后,停止运行。
输出结果如下:
当然上文中终止线程的方法,不是最好的方法。可以用标识位的方式来终止,以后再讲。
这里我们只是介绍了sleep方法,还没有结合锁。接下来我们再来研究下wait 和 锁。
原文链接:http://www.67tgb.com/?p=521
欢迎访问:望月听涛