【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!
···

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

edanhuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值