浅谈java13 增加了纤程和一些语法,
1.switch表达式语法,整个switch语句可以作为一个值来对待
int i=0;
String s = switch(i){
case 1 ->"i为1时返回的值"
case 2 ->"i为2时返回的值"
default ->"默认返回的值"
}
这个其实在Java12中已经有但属于尝鲜版本
2.字符串语法
之前Java中字符串拼接是非常麻烦的一个东西,比如:
String a = "第一个字符串"+
"第二个字符串"+
"第三个字符串";
Java13中 String a = """
第一个字符串
第二个字符串
第三个字符串
""";
三个双引号 这是一个文本框的概念
纤程:在其他语言中早就有了纤程,比如go语言,python。 Java语言也慢慢开始有
什么是纤程
程序--》进程--》线程--》纤程
线程的效率要比纤程低
CPU一个内核态 一个用户态
先要了解CPU 是有执行级别的 CPU --》CPL--》0123 举个4个级别的CPU 有些CPU有7个不同的CPU不同 了解这个概念就行,比如windows 关机是0级别 Linux系统里有0 和3,0是内核态,3是用户态 可以理解为内核态比较高级它可以干所有的事,开机关机,杀死进程等,用户态就只能一些数据的交互,它要做一些操作要调用内核态的指令,内核态可以访问所有区域的内存,用户态只能访问用户态区域的内存。
启动一个app 是发生在用户态,要产生一个线程是要和内核态打交道,这个打交道是重量级的,它需要保护线程,然后产生中断,让内核处理中断,启动新的线程,然后把结果反馈回来恢复线程,app继续执行。转了一圈,它的效率比较低
纤程在用户态上执行,不需要惊动内核态,所以纤程叫做更轻量级的线程,jvm现在暂时不支持纤程,为什么go语言在高并发中有天然优势,因为go语言在高并发时是启动一个go程,其实就是纤程。
Java在用这个概念发现不太好用于是提供了一个开源的叫做Quasar的类库
伪代码测试:
传统线程:
long 开始时间;
for(int i=0;i<10000;i++){
Thread thread new Thread(){
调用方法A();
}
thread.start();
}
long 结束时间;
System打印 时间
public void A(){
int result=0;
for(int i=0;i<10000;i++){
for(int m=0;m<1000;m++)result+=i;
}
}
纤程:
long 开始时间;
for(int i=0;i<10000;i++){
Fiber<void> fiber = new Fiber<void>(new SuspendableRunnable(){
public void run() throws SuspendExecution,InterruptedExecution{
调用方法A();A()
}
});
fiber.start();
}
long 结束时间;
System打印 时间
public void A(){
int result=0;
for(int i=0;i<10000;i++){
for(int m=0;m<1000;m++)result+=i;
}
}