jdk21新特性详解总结
1.StringBuilder和StringBuffer新增了一个repeat方法
/**
* Java 21的StringBuilder和StringBuffer新增了一个repeat方法
*/
public static void repeatStr(){
var sb=new StringBuilder().repeat("*",10);
System.out.println(sb);
}
运行结果如下:
2.Java 21增强对Emoji表情符号的处理了
/**
* Java 21增强对Emoji表情符号的处理了
*/
public static void emoji(){
//用isEmoji方法来判断字符串中是否有表情
String message = "欢迎来到 www.didispace.com ❤️,要不要来杯 ☕️ ?";
if(message.codePoints().anyMatch(Character::isEmoji)) {
System.out.println("Message has emoji");
}
}
运行结果如下:
3.Java 21新特性:Sequenced Collections(有序集合)
/**
* Java 21新特性:Sequenced Collections(有序集合)
*
* Sequenced Collections引入了三个新接口:
* SequencedCollection
* SequencedMap
* SequencedSet
*
* 第一个和最后一个元素的访问:对于对于List, Deque, Set这些有序的集合,访问方法变得统一起来:
*
* 第一个元素:collection.getFirst()
* 最后一个元素:collection.getLast()
*/
public static void SeqCollections(){
List<Integer> aa=new ArrayList<>();
aa.add(99);
aa.add(80);
aa.add(48);
System.out.println("aa.getFirst() = " + aa.getFirst());
System.out.println("aa.getLast() = " + aa.getLast());
}
运行结果如下:
4.虚拟线程&限流
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class StringRepeat {
// 定义限流并发的信号量,这里设置为:10
private static final Semaphore POOL = new Semaphore(10);
/**
* jdk21 虚拟线程(Virtual Threads):
* 1.来简化和增强并发性;
* 2.虚拟线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”
*3.虚拟线程是轻量级的,意味着比传统线程创建更多数量,并且开销要少得多。
* 使得在自己的线程中运行单独任务或请求变得更加实用,即使在高吞吐量的程序中
*
*
*/
public static void virtualThreads(){
//创建和使用虚线程的方法1.使用静态构建器方法
Runnable runnable = () -> {
System.out.println("Hello, hrha.com");
};
// 使用静态构建器方法
//Thread virtualThread = Thread.startVirtualThread(runnable);
// Thread.ofVirtual()
// .name("space-virtual-thread")
// .start(runnable);
//创建和使用虚线程的方法2.与ExecutorService结合使用
try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 100; i++) {
executorService.submit(runnable);
}
}
}
/**
* 虚拟线程的限流
*/
public static void callOldService() {
try{
POOL.acquire(); // 尝试通过信号量获取执行许可
} catch(InterruptedException e){
// 执行许可获取失败的异常处理
}
try {
// 获取到执行许可,这里是使用虚拟线程执行任务的逻辑
Runnable runnable = () -> {
System.out.println("Hello, 666ha.com");
};
Thread.ofVirtual()
.name("space-virtual-thread")
.start(runnable);
} finally {
// 释放信号量
POOL.release();
}
}
public static void main(String[] args) {
virtualThreads();
callOldService();
}
}
运行结果如下: