【无标题】有用但不为大家所熟知的 Java 特性

本文介绍了Java中一些不常见的特性,包括延迟队列DelayQueue、时间格式的天数表示、印花锁StampedLock、并行累加器Concurrent accumulators、十六进制格式HexFormat、数组的二分法检索、位图BitSet以及移相器Phaser。这些特性在多线程、并发和数据处理中提供了更高效和灵活的解决方案。
摘要由CSDN通过智能技术生成

1. 延迟队列【Delay Queue】

如您所知,Java 中有许多类型的集合可用。但你听说了DelayQueue​吗?它是一种特定类型的 Java 集合,它允许我们根据元素的延迟时间对元素进行排序。老实说,这是一门非常有趣的课。尽管 DelayQueue​ ****该类是 Java 集合的成员,但它属于 java.util.concurrent​ 包。它实现了BlockingQueue接口。只有当元素的时间到期时,才能从队列中取出元素。

为了使用它,首先在类里面需要实现接口中的getDelay​方法Delayed。它不必是一个类——你也可以使用 Java Record。

public record DelayedEvent(long startTime, String msg) implements Delayed {

    public long getDelay(TimeUnit unit) {
        long diff = startTime - System.currentTimeMillis();
        return unit.convert(diff, TimeUnit.MILLISECONDS);
    }

    public int compareTo(Delayed o) {
        return (int) (this.startTime - ((DelayedEvent) o).startTime);
    }

}

假设我们想推迟元素10秒。我们只需要设置当前时间增加了10秒DelayedEvent类。

final DelayQueue<DelayedEvent> delayQueue = new DelayQueue<>();
final long timeFirst = System.currentTimeMillis() + 10000;
delayQueue.offer(new DelayedEvent(timeFirst, "1"));
log.info("Done");
log.info(delayQueue.take().msg());

上面可见代码的输出是什么?让我们来看看。

2. 时间格式的天数【Period of Days in Time Format】

Java 8 改进了很多时间处理 API。从这个版本的 Java 开始,在大多数情况下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值