zoukankan      html  css  js  c++  java
  • 线程Sleep

    方法源码
    /**
         * Causes the currently executing thread to sleep (temporarily cease
         * execution) for the specified number of milliseconds, subject to
         * the precision and accuracy of system timers and schedulers. The thread
         * does not lose ownership of any monitors.
         *
         * @param  millis
         *         the length of time to sleep in milliseconds
         *
         * @throws  IllegalArgumentException
         *          if the value of {@code millis} is negative
         *
         * @throws  InterruptedException
         *          if any thread has interrupted the current thread. The
         *          <i>interrupted status</i> of the current thread is
         *          cleared when this exception is thrown.
         */
        public static native void sleep(long millis) throws InterruptedException;
        /**
         * Causes the currently executing thread to sleep (temporarily cease
         * execution) for the specified number of milliseconds plus the specified
         * number of nanoseconds, subject to the precision and accuracy of system
         * timers and schedulers. The thread does not lose ownership of any
         * monitors.
         *
         * @param  millis
         *         the length of time to sleep in milliseconds
         *
         * @param  nanos
         *         {@code 0-999999} additional nanoseconds to sleep
         *
         * @throws  IllegalArgumentException
         *          if the value of {@code millis} is negative, or the value of
         *          {@code nanos} is not in the range {@code 0-999999}
         *
         * @throws  InterruptedException
         *          if any thread has interrupted the current thread. The
         *          <i>interrupted status</i> of the current thread is
         *          cleared when this exception is thrown.
         */
        public static void sleep(long millis, int nanos)
    

    native关键字:Java Native Interface (Java本地接口)

    • sleep(long millis)方法睡眠一定的毫秒数,sleep方法都不回放弃monitor锁,这个非常重要
    • JDK1.5之后引入了一个枚举TimeUnit,对sleep进行了封装,推荐使用此方法来实现sleep。

    与sleep类似的是yield方法,也是Thread类提供的一个方法,提醒调用器当前的线程愿意放弃当前获取的CPU资源,如果CPU的资源不紧张的话则此方法相当于失效。若是紧张的话则会提供给其他线程进行使用。yield的方法将线程从RUNNING状态切换到RUNNABLE状态。不过不推荐使用。
    sleep和yield的区别:

    • sleep会导致当前线程暂停指定的时间,没有CPU时间片的消耗。
    • yield只是对CPU调度器的一个提示,如果CPU调用器没有忽略这个提示,它会导致线程上下文的切换
    • sleep会使线程短暂block,会在给定的时间内释放CPU资源。
    • yield会使RUNNING状态Thread进入RUNNABLE状态,前提是CPU没有忽略这个提醒。
    • sleep几乎百分百地完成了给定时间的休眠,而yield的提示并不能一定担保。
    • 一个线程sleep另一个线程调用interrupt会捕捉到中断信号,而yield则不会。

    Thread.interrupt 中断信号在sleep中会被设置为true,而yield不会产生影响。

  • 相关阅读:
    windows phone 8 开发系列(三)程序清单说明与配置
    windows phone 8 开发系列(二)Hello Wp8!
    windows phone 8 开发系列(一)环境搭建
    MVC3 ViewBage 输出的值 被编码
    汉字取首字母拼音 ---vue---js
    一个基于POI的通用excel导入导出工具类的简单实现及使用方法
    MongoDB基础命令笔记
    Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
    jQuery与ajax 基础运用
    mysql常处理用时间sql语句
  • 原文地址:https://www.cnblogs.com/Mr-GG/p/xian-chengsleep.html
Copyright © 2011-2022 走看看