栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【juc学习之路第1天】JUC简介以及TimeUnit的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【juc学习之路第1天】JUC简介以及TimeUnit的使用

简介JUC

JUC是java并发编程中常用到的框架,其于JDK5中被提出,实现在java.util.concurrent包下,所以被人们广为称之JUC。它的核心理念是CAS、AQS,利用这两个理念,可以解决开发过程中的性能问题以及稳定性的问题,例如:

  • 想使用线程就要使用Runnable,Callable接口;
  • 想数据同步处理,要使用synchronized,但性能很差;
  • 想实现变量的数据更新,要是用volatile;
  • 想实现等待与唤醒,使用Object类中提供的wait()、notify();

但有了上面这些实现方式,就有了死锁的概念出现了。所以开发者想要轻松实现开发,一套让人轻松且可靠的框架少不了,这就是为什么要学习JUC的原因了。

JUC包的组成


可以发现,JUC的组成主要是atomic的原子操作类、locks的锁实现类以及根据这两个类实现的工具。

TimeUnit使用

虽然在 Thread 的开发之中可以使用毫秒和纳秒进行线程单位的配置,但是从实际的开发来说有可能会使用到时、分、秒等概念,所以在Java 里面为了进一步简化这种时间的计算管理,提供了一个专属的 TimeUnit 工具类,该类属于一个枚举类:

public enum TimeUnit {}

在整个的 TimeUnit 里面已经定义了大量的常用的时间单元:天(DAYS)、小时(HOURS)、分钟(MINUTES)、秒(SECONDS)、毫秒 (MILLISECONDS)、纳秒 (NANOSECONDS)、微秒(MICROSECONDS),除了这些时间单元之外还提供有了一系列的处理方法,例如:时间转换方法

public class Main {
    public static void main(String[] args) {
        long hour = 1;
        long second = TimeUnit.SECONDS.convert(hour, TimeUnit.HOURS);
        System.out.println(second);
    }
}

虽然 TimeUnit 类很好用,但是从JDK1.8 之后提供了一个java.time.Duration 的操作类(问隔),这个类在实际的开发之中经常会被使用到,例如:在后续学习到 Spring 开发框架的时候,那么一般都要进行任务间隔的配置。

Duration duration = Duration.ofHours(2).plusHours(1);
System.out.println(duration);
long minutes = TimeUnit.MINUTES.convert(duration);
System.out.println(minutes);

PT3H
180

范例:使用TimeUnit计算180天后的日期

long current = System.currentTimeMillis();
long after = current + TimeUnit.MILLISECONDS.convert(180, TimeUnit.DAYS);
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(after));
System.out.println(date);

2022-06-14 23:27:11

在末来进行多线程的开发之中只要是牵扯到时间单位的操作问题的话,要统一使用 TimeUnit 类进行定义处理,这是在JUC里面见到最多的参数的形式。

范例:实现每n秒执行某个操作

for (int i = 0; i < 10; i ++) {
    try {
        TimeUnit.SECONDS.sleep(2);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    new Thread(() -> {
        System.out.println("[ "+ Thread.currentThread().getName() +" ] hello alexander!");
    }).start();
}

[ Thread-0 ] hello alexander!
[ Thread-1 ] hello alexander!
[ Thread-2 ] hello alexander!
···

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671542.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号