线程知识回顾(二)---线程sleep

  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_第1张图片

  当然上文中终止线程的方法,不是最好的方法。可以用标识位的方式来终止,以后再讲。

  这里我们只是介绍了sleep方法,还没有结合锁。接下来我们再来研究下wait 和 锁。


  原文链接:http://www.67tgb.com/?p=521

  欢迎访问:望月听涛


你可能感兴趣的:(多线程)