淺談java13 增加了纖程和一些語法,
1.switch表達(dá)式語法,整個(gè)switch語句可以作為一個(gè)值來對(duì)待
int i=0;
String s = switch(i){
case 1 ->"i為1時(shí)返回的值"
case 2 ->"i為2時(shí)返回的值"
default ->"默認(rèn)返回的值"
}
這個(gè)其實(shí)在Java12中已經(jīng)有但屬于嘗鮮版本
2.字符串語法
之前Java中字符串拼接是非常麻煩的一個(gè)東西,比如:
String a = "第一個(gè)字符串"+
? ? ? ? ? ? ? ? "第二個(gè)字符串"+
? ? ? ? ? ? ? ? "第三個(gè)字符串";
Java13中? String a = """
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第一個(gè)字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第二個(gè)字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第三個(gè)字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? """;
三個(gè)雙引號(hào)? 這是一個(gè)文本框的概念
纖程:在其他語言中早就有了纖程,比如go語言,python。? ? Java語言也慢慢開始有
什么是纖程
程序--》進(jìn)程--》線程--》纖程

線程的效率要比纖程低
CPU一個(gè)內(nèi)核態(tài) 一個(gè)用戶態(tài)
先要了解CPU 是有執(zhí)行級(jí)別的 CPU --》CPL--》0123 舉個(gè)4個(gè)級(jí)別的CPU 有些CPU有7個(gè)不同的CPU不同 了解這個(gè)概念就行,比如windows 關(guān)機(jī)是0級(jí)別 Linux系統(tǒng)里有0 和3,0是內(nèi)核態(tài),3是用戶態(tài) 可以理解為內(nèi)核態(tài)比較高級(jí)它可以干所有的事,開機(jī)關(guān)機(jī),殺死進(jìn)程等,用戶態(tài)就只能一些數(shù)據(jù)的交互,它要做一些操作要調(diào)用內(nèi)核態(tài)的指令,內(nèi)核態(tài)可以訪問所有區(qū)域的內(nèi)存,用戶態(tài)只能訪問用戶態(tài)區(qū)域的內(nèi)存。
啟動(dòng)一個(gè)app 是發(fā)生在用戶態(tài),要產(chǎn)生一個(gè)線程是要和內(nèi)核態(tài)打交道,這個(gè)打交道是重量級(jí)的,它需要保護(hù)線程,然后產(chǎn)生中斷,讓內(nèi)核處理中斷,啟動(dòng)新的線程,然后把結(jié)果反饋回來恢復(fù)線程,app繼續(xù)執(zhí)行。轉(zhuǎn)了一圈,它的效率比較低
纖程在用戶態(tài)上執(zhí)行,不需要驚動(dòng)內(nèi)核態(tài),所以纖程叫做更輕量級(jí)的線程,jvm現(xiàn)在暫時(shí)不支持纖程,為什么go語言在高并發(fā)中有天然優(yōu)勢(shì),因?yàn)間o語言在高并發(fā)時(shí)是啟動(dòng)一個(gè)go程,其實(shí)就是纖程。
Java在用這個(gè)概念發(fā)現(xiàn)不太好用于是提供了一個(gè)開源的叫做Quasar的類庫
偽代碼測試:
傳統(tǒng)線程:
long 開始時(shí)間;
for(int i=0;i<10000;i++){
Thread thread new Thread(){
調(diào)用方法A();
}
thread.start();
}
long 結(jié)束時(shí)間;
System打印 時(shí)間
public void A(){
int result=0;
for(int i=0;i<10000;i++){
for(int m=0;m<1000;m++)result+=i;
}
}
纖程:
long 開始時(shí)間;
for(int i=0;i<10000;i++){
Fiber<void> fiber = new Fiber<void>(new SuspendableRunnable(){
public void run() throws SuspendExecution,InterruptedExecution{
調(diào)用方法A();A()
}
});
fiber.start();
}
long 結(jié)束時(shí)間;
System打印 時(shí)間
public void A(){
int result=0;
for(int i=0;i<10000;i++){
for(int m=0;m<1000;m++)result+=i;
}
}