TimeUnit是什么?
TimeUnit是java.util.concurrent包下的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),暂停线程时它不会释放锁,如果有线程中断了当前线程,该方法会抛出InterrupttedException异常。但是我们很多人并没有注意的一个潜在的问题就是它的可读性。Thread.sleep()是一个重载方法,可以接收长整型毫秒和长整型的纳秒参数,这样对程序员造成的一个问题就是很难知道到底当前线程是睡眠了多少秒、分、小时或者天。看看下面这个Thread.sleep()方法:
Thread.sleep(2400000;
粗略一看,你能计算出当前线程是等待多长时间吗?
Thread.sleep(4*60*1000);
这样写貌似还好些~
下面我们用TimeUnit类来解决这个易读性问题
public class TimeUnitTest { public static void main(String args[]) throws InterruptedException { System.out.println("Sleeping for 4 minutes using Thread.sleep()"); Thread.sleep(4 * 60 * 1000); System.out.println("Sleeping for 4 minutes using TimeUnit sleep()"); TimeUnit.SECONDS.sleep(4); // 睡眠4秒 TimeUnit.MINUTES.sleep(4); // 分钟 TimeUnit.HOURS.sleep(1); // 小时 TimeUnit.DAYS.sleep(1); // 天 }
除了sleep的功能外,更多功能等你发现,其实它也是封装了Thread.sleep()方法!
Thread.sleep()方法的地方你最好使用TimeUnit.sleep()方法来代替。它不尽可以提高代码的可读性而且能更加熟悉java.util.concurrent包,因为TimeUnit在并发编程中也是一个关键API。
相关推荐
JDK包含了Java运行时环境(JRE)、编译器(javac)、Java应用程序启动器(java)以及其他工具,如Javadoc和JAR,这些工具使得开发者能够创建、测试和部署Java应用程序。本篇将详细介绍JDK的帮助文档,以及如何利用...
Java JDK API文档是Java开发人员的重要参考资料,它包含了Java开发工具包(JDK)的所有公共类、接口和方法的详细说明。这份文档是理解和使用Java编程语言的关键资源,为开发者提供了全面的API(应用程序编程接口)...
JDK 6.0引入了`java.util.concurrent.TimeUnit`枚举,可以方便地进行不同时间单位之间的转换,如秒、毫秒等,这对于倒计时计数很有帮助。 2. **线程与并发**:倒计时通常需要在后台线程中运行,以不影响主程序的...
4. **枚举(Enums)**:JDK 1.5引入的枚举类型,用于定义一组固定的值,如`java.util.concurrent.TimeUnit`中的`NANOSECONDS`、`MICROSECONDS`等。 5. **异常(Exceptions)**:异常是程序运行时出现的问题,如`...
`CountDownLatch` 是一个同步辅助类,它允许一个或多个线程等待其他线程完成指定次数的操作。一旦计数到达零,所有等待的线程都会被释放。它通常用于初始化阶段,让所有线程等待某个任务完成后再继续执行。 8. `...
### JDK 7 NIO2 新特性详解 #### 引言 随着 Java 7 的发布,NIO (New I/O) 接口迎来了重要的更新,即 NIO.2 或称为 MNI (More New I/O)。NIO.2 增强了 Java 1.4 中的 NIO API,为开发人员提供了更为强大的 I/O ...
在Java并发编程中,线程池(ThreadPoolExecutor)是一个至关重要的工具,它允许开发者有效地管理线程资源,提高系统的...在实际开发中,根据应用的需求和性能指标来定制线程池配置,是优化并发程序性能的关键步骤之一。
4. **枚举(Enums)**:自Java 5起引入,枚举是一种特殊的类,用于定义一组预定义的常量,如`java.util.concurrent.TimeUnit`中的`NANOSECONDS`、`MICROSECONDS`等。 5. **异常(Exceptions)**:Java采用异常处理...
在JDK8及以上版本中,开发者可以利用一系列新特性显著提高开发效率,其中异步编程是提升效率的重要手段之一。异步编程允许程序在执行主要任务的同时处理其他并发任务,避免了阻塞式的等待,提高了系统资源的利用率。...
### Java多线程-JDK5.0新增线程创建方式 #### 一、新增方式1:实现Callable接口 ##### (1)介绍 自Java 5.0起,为提高线程管理的灵活性与效率,引入了`Callable`接口,这是一种全新的创建线程的方式。与传统的`...
在JDK 5.0中,Java的并发编程能力得到了显著增强,引入了更加灵活和可伸缩的锁定机制。这一变化主要是为了提高并发应用程序的性能,并为开发者提供了更多的控制选项。这里我们将深入探讨其中的关键知识点——`...
`Delayed`接口定义了一个`getDelay(TimeUnit unit)`方法,用于获取元素剩余的延迟时间。元素的延迟时间是在插入队列时设定的,到达这个时间后,元素才可被取出。 2. **入队与出队** - **入队(offer)**: 当我们向...
【描述】:在实际的IT项目中,并发编程是提高效率的关键技术之一。一个典型的并发应用场景是商品详情页面的展示,该页面包含商品基本信息、销量、地址、评价、推荐和店铺信息等,这些数据可以通过并发方式获取以提升...
OkHttp是Java和Android开发中广泛使用的...同时,它的异步支持、超时设置和缓存策略等特性,使得它成为现代Android和Java应用中的首选网络库。通过深入学习和实践,你将能够充分利用OkHttp的优势,提升应用的网络性能。
13. **日期和时间API**:java.util.Calendar和Date类提供了日期和时间的操作,而Java 1.6版本还引入了java.util.concurrent.TimeUnit,用于处理时间间隔。 14. **正则表达式**:java.util.regex包提供了Pattern和...
- `ScheduledExecutorService` 是 Java Concurrency API(JDK 5.0 引入)的一部分,提供了更强大、更灵活的定时任务管理能力。 - 通过实现此接口的类,如 `ScheduledThreadPoolExecutor`,可以创建一个线程池,...
Java的多线程框架在JDK5中得到了显著增强,引入了由Doug Lea设计的java.util.concurrent包,这是一个高效且强大的并发工具集。Doug Lea不仅是一位教授,还是一位杰出的作者和开发者,他的并发库对Java社区产生了深远...
例如,`java.lang.String`类,它是Java中最常用的类之一,用于表示文本字符串。文档会详细解释它的构造函数(如`String()`,`String(char[] value)`),方法(如`length()`,`substring()`),以及相关属性(如`...
5. **时间单位**(TimeUnit unit):定义`keepAliveTime`的时间单位。 6. **线程工厂**(ThreadFactory threadFactory):创建新线程的工厂。 7. **拒绝策略**(RejectedExecutionHandler handler):当线程池和工作...
Java虚拟机(JVM)作为Java程序的运行环境,其核心之一在于内存管理机制。本文旨在通过具体的实例来探索和验证JVM内存管理的相关理论,主要关注点在于如何利用工具如`jconsole`观察JVM的内存使用情况,以及如何通过...