国色天香在线观看全集免费播放

你的位置:国色天香在线观看全集免费播放 > 国产美女裸体无遮挡免费视频 > 国产美女裸体无遮挡免费视频

你可能不泄漏但却很有用的 Java 特质

发布日期:2022-06-18 17:02    点击次数:171

你可能不泄漏但却很有用的 Java 特质

本文转载自微信公众号「 crossoverJie」,作家crossoverJie  。转载本文请运筹帷幄 crossoverJie公众号。

在这篇著作中你将会学习到一些你可能没听过但有用的 Java 特质,这些是我个人常用的一些特质或者是从其他著作中学习到的,要点是热心 API 而不是话语自己。

蔓延部队

家喻户晓,在 Java 中有好多类型的鸠合不错使用,但你传闻过 DelayQueue 吗?它是一个特定类型的鸠合,允许咱们基于延经常间对数据排序,这是一个相等专门义的类,它已毕了 BlockingQueue 接口,只消当数据过时后能力从部队里取出。

使用它的第一步,你的 class 需要已毕 Delayed 接口中的 getDelay 身手,固然也不错无须声明一个 class,使用 Record 亦然不错的。

这是 Java14 的新特质

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

假定咱们需要一个延时 10s 取出的数据,咱们只需要放入一个比面前技能多 10s 的任务即可。

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

最终输出如下:

技能模样的日历

这个特质可能对大部分人来说没什么用,但教师说我个人相等可爱;无论奈何说 Java 8 在技能 API 上修订了好多。从这个版块首先大约你不再需要其他任何推广库了。

你能意想嘛,从 Java 16 中你甚而不错用圭臬库示意一天内的日历了, a级毛片免费观看在线播放比如 “in the morning” “in the afternoon” ,这是一个新的模样语句 B。

String s = DateTimeFormatter   .ofPattern("B")   .format(LocalDateTime.now()); System.out.println(s); 

以下是我的输出,具体和你面前技能关系。

你可能会想为什么会是调用 “B” 呢,这确乎看起来不太直觉,通过下表也许能解答疑心:

Stamped Lock

在我看来,并发包是 Java 中最专门义的包之一,同期又很少被建造者熟悉左右,尽头是遥远使用 web 建造框架的建造者。

有几许人照旧使用过 Lock 呢?联系于 synchronized 来说这是一种更天确凿线程同步机制。

从 Java8 首先你不错使用一种新的锁:StampedLock.StampedLock,能够替代 ReadWriteLock。

假定当今有两个线程,一个线程更新金额、一个线程读取余额;更新余额的线程领先需要读取金额,国产美女裸体无遮挡免费视频再多线程的情况下需要某种同步机制(否则更新数据会发生诞妄),第二个线程用乐观锁的方法读取余额。

StampedLock lock = new StampedLock(); Balance b = new Balance(10000); Runnable w = () -> {    long stamp = lock.writeLock();    b.setAmount(b.getAmount() + 1000);    System.out.println("Write: " + b.getAmount());    lock.unlockWrite(stamp); }; Runnable r = () -> {    long stamp = lock.tryOptimisticRead();    if (!lock.validate(stamp)) {       stamp = lock.readLock();       try {          System.out.println("Read: " + b.getAmount());       } finally {          lock.unlockRead(stamp);       }    } else {       System.out.println("Optimistic read fails");    } }; 

当今更新和读取的都用 50 个线程来进行测试,最终的余额将会等于 60000.

ExecutorService executor = Executors.newFixedThreadPool(10); for (int i = 0; i < 50; i++) {    executor.submit(w);    executor.submit(r); } 
并发累加器

锁并并不是并发包中独一专门义的特质,并发累加器也相似兴致;它不错左证咱们提供的函数更新数据;再多线程更新数据的场景下,LongAccumulator 是比 AtomicLong 更优的选拔。

当今让咱们来望望具体怎么使用,咱们需要两个参数进行为手化;第一个是用于累加贪图的函数,常常是一个 sum 函数,第二个参数则是累加贪图的首先化值。

接下来咱们用 10000 算作首先值来创建一个 LongAccumulator,最终成果是几许?其实成果与上文疏浚,都是 60000,但此次咱们并莫得使用锁。

LongAccumulator balance = new LongAccumulator(Long::sum, 10000L); Runnable w = () -> balance.accumulate(1000L);  ExecutorService executor = Executors.newFixedThreadPool(50); for (int i = 0; i < 50; i++) {    executor.submit(w); }  executor.shutdown(); if (executor.awaitTermination(1000L, TimeUnit.MILLISECONDS))    System.out.println("Balance: " + balance.get()); assert balance.get() == 60000L; 
数组的二分查找

假定咱们想在一个排序列表中插入一个新元素,不错使用 Arrays.binarySearch() 函数,当这个 key 存在时将会复返 key 地点的索引,若是不存在时将会复返插入的位置-(insertion point)-1。

binarySearch 是 Java 中相等通俗且灵验的查询身手。

底下的这个例子中,对复返成果取反便能的到索引位置。

int[] t = new int[] {1, 2, 4, 5}; int x = Arrays.binarySearch(t, 3);  assert ~x == 2; 

负数的二进制是以正数的补码示意,对一个数取反+1 就等于补码,是以这里凯旋取反就等于 Arrays.binarySearch() 不存在时的复返值了。

Bit Set

若是你需要对二进制数组进行操作你会奈何做?用 boolean[] 布尔数组?

有一种更高效又更省内存的方法,那便是 BitSet。它允许咱们存储和操作 bit 数组,与 boolean[] 比拟可省 8 倍的内存;也不错使用 and/or/xor 等逻辑操作。

假定咱们当今有两个 bit 数组,咱们需要对他们进行 xor 运算;咱们需要创建两个 BitSet 实例,然后调用 xor 函数。

BitSet bs1 = new BitSet(); bs1.set(0); bs1.set(2); bs1.set(4); System.out.println("bs1 : " + bs1);  BitSet bs2 = new BitSet(); bs2.set(1); bs2.set(2); bs2.set(3); System.out.println("bs2 : " + bs2);  bs2.xor(bs1); System.out.println("xor: " + bs2); 

最终的输出成果如下:

 



上一篇:没有了

上一篇:没有了