微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java Thread之Sleep()使用方法总结

这篇文章主要介绍了Java Thread之Sleep()使用方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、API简介

Thread.sleep()是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断,将会抛出IterruptedException中断异常。。主要方法如下:

【a】sleep(long millis)  线程睡眠 millis 毫秒

【b】sleep(long millis, int nanos)  线程睡眠 millis 毫秒 + nanos 纳秒

api文档

二、使用方法

注意:在哪个线程里面调用sleep()方法就阻塞哪个线程。

public class SleepDemo { public static void main(String[] args) throws InterruptedException { Process process = new Process(); Thread thread = new Thread(process); thread.setName("线程Process"); thread.start(); for (int i = 0; i " + i); //阻塞main线程,休眠一秒钟 Thread.sleep(1000); } } } /** * 线程类 */ class Process implements Runnable { @Override public void run() { for (int i = 0; i " + i); //休眠一秒钟 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printstacktrace(); } } } }

执行结果:main线程执行一次之后休眠一秒钟,让出cpu,此时Process线程执行一次然后又休眠一秒,依次执行。

三、示例

下面以一个倒计时的功能来进一步说明sleep()方法的使用:

/** * @Description: 线程休眠Sleep()方法 * @Author: weishihuai * @Date: 2018/11/11 21:31 * * 1. 注意:sleep()方法使用的位置,如果使用在main线程执行代码中,则阻塞的是main线程。如果在其他线程执行的代码中,则阻塞的是执行这些代码的线程 * 2. 案例: 倒计时功能 */ public class TestSleepThread { public static void main(String[] args) throws InterruptedException { countDown(10000); } /** * 倒计时方法 * * @param mills 倒计时开始的时间距离当前时间多少毫秒 */ public static void countDown(long mills) { Date endDate = new Date(System.currentTimeMillis() + mills); long endTime = endDate.getTime(); while (true) { System.out.println(new SimpleDateFormat("hh:mm:ss").format(endDate)); //下一秒时间 endDate = new Date(endDate.getTime() - 1000); //休眠一秒钟 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printstacktrace(); } if (endTime - endDate.getTime() > mills) { break; } } } }

执行结果:

四、注意问题

【a】sleep()方法是Thread类的静态方法,如果调用线程对象.sleep()方法并不是该线程就休眠,反正在哪一个线程里面执行了sleep()方法一个线程就休眠。

【b】线程睡眠到期自动苏醒,并返回到可运行状态(就绪),不是运行状态。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐