JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java之TimeUnit的使用

wys521 2024-11-23 23:46:31 精选教程 20 ℃ 0 评论

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);
 }
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表