网站首页 > 精选教程 正文
TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep()。
Sleep方法有两个参数:分别为millis和nanos。
millis参数含义:以毫秒为单位的睡眠时间长度。
nanos参数含义:0-999999额外的纳秒睡眠 。
Thread.sleep(long millis)和Thread.sleep(long millis, int nanos)静态方法强制当前正在执行的线程休眠(暂停执行)。
如果你已经使用过Thread.sleep(),那么你一定熟知它是一个静态方法。暂停线程时它不会释放锁,如果有线程中断了当前线程,该方法会抛出InterrupttedException异常。有一个潜在的问题就是它的可读性。
TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段。主要作用有:
- 时间颗粒度转换;
- 线程延时;
一、时间颗粒度转换
常用的颗粒度:
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
一般比如多少分钟转多少毫秒、多少秒转多少毫秒、多少小时转多少分钟等等,如下所示:
public long toMillis(long d) //转化成毫秒
public long toSeconds(long d) //转化成秒
public long toMinutes(long d) //转化成分钟
public long toHours(long d) //转化成小时
public long toDays(long d) //转化天
示例代码:
import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { //1天有24个小时,1代表1天:将1天转化为小时 System.out.println( TimeUnit.DAYS.toHours( 1 ) ); //1小时有3600秒 System.out.println( TimeUnit.HOURS.toSeconds( 1 )); //把1天转化成24小时 System.out.println( TimeUnit.HOURS.convert( 1 , TimeUnit.DAYS ) ); } }
二、线程延时,可替代Thread.sleep()
TimeUnit.sleep()内部调用的Thread.sleep()也会抛出InterruptException。
让线程休息1分钟:
Thread.sleep(1*60*1000);
睡眠时间用毫秒,当前线程将等待1分钟,时间参数看起来不是很直观。
TimeUnit类解决了这个问题,可以通过指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS来实现。
让我们来看看线程睡眠1分钟用TimeUnit是如何使用的。
TimeUnit.MINUTES.sleep(1);
示例代码:
package com.rickie; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws InterruptedException { System.out.println("线程休息1分钟,使用Thread.sleep()"); Thread.sleep(1 * 60 * 1000); System.out.println("线程休息1分钟,使用TimeUnit sleep()"); TimeUnit.MINUTES.sleep(1); } }
猜你喜欢
- 2024-11-23 线程生命周期
- 2024-11-23 线程同步synchronized(不同步的问题、队列与锁),死锁产生和解决
- 2024-11-23 面试突击31:什么是守护线程?它和用户线程有什么区别?
- 2024-11-23 每日分享- NodeJS 程序中实现线程睡眠
- 2024-11-23 Java 17 多线程中的守护线程
- 2024-11-23 美团面试真题之一个线程OOM,进程里的其他线程还能运行吗?
- 2024-11-23 Java多线程-线程中断interrupt
- 2024-11-23 C++ 让线程休眠特定时间
- 2024-11-23 什么是线程死锁?形成条件是什么?如何避免?
- 2024-11-23 你能说出多线程中sleep、yield、join的用法及sleep与wait区别吗
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)