Java多线程七:线程调度(休眠)sleep()

线程休眠

线程休眠的目的是使线程让出CPU的使用权.当线程休眠时,会将CPU资源的使用交给其他线程,以便能够线程之间的轮换调用.当休眠一定时间后,线程就会苏醒,然后进入准备状态等待执行.

sleep()函数

如何让一个线程休眠.有两种方法,一是使用Thread.sleep(long millis)或者Thread.sleep(long millis, int nanos)方法.另一个是使用TimeUnit类的sleep()方法来实现线程休眠.

实例

使用Thread.sleep(long millis)

将下面一段代码中的TimeUnit.SECONDS.sleep(sleppTime)换成Thread.sleep(sleepTime)即可.

使用TimeUnit类的sleep()方法

/**
 * Thinking In Java 第21章 并发 练习6
 * 创建一个任务,它将睡眠1至10秒之间的随机数量的时间,然后显示它的睡眠时间并退出.创建并运行一定数量的这种任务
 * 
 * @author XunzhiYin
 */
public class SleepDemo02 {
    public static void main(String[] args) {
        ExecutorService service = Executors.newCachedThreadPool();
        for (int i = 0; i < 5; i++) {
            service.execute(new SleepTask());
        }
        service.shutdown();
    }
}

class SleepTask implements Runnable {
    public void run() {
        int sleppTime = (int) (1 + Math.random() * (10 - 1));
        try {
            TimeUnit.SECONDS.sleep(sleppTime);
            System.out.println(Thread.currentThread().getName() + "休眠" + sleppTime + "s");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

部分API详解

  1. Thread.sleep(millis) 该静态函数被调用时表示当前线程要进入休眠状态,millis表示休眠的毫秒数
  2. Thread.sleep(millis, nanos) 该静态方法增加nanos参数,表示纳秒数.方法使当前执行的线程睡眠指定的毫秒数加纳秒指定数量,受制于精度和系统计时器和调度程序精度.
  3. TimeUnit类 该类通过制定具体的时间模式DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS来提供一个可读性比较好的休眠方法.具体使用见上例.

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