勁爆!Java?協(xié)程要來(lái)了。。。
我們都知道,Java 目前最小的系統(tǒng)調(diào)度單元只支持線程,官方是不支持協(xié)程的,但可以通過(guò)第三方框架實(shí)現(xiàn),估計(jì)也很少有人會(huì)用吧,多線程就能滿足需求。好消息來(lái)了,不久的將來(lái),Java 要開(kāi)始支持協(xié)程了,這真是勁爆消息啊??!在 openjdk 的官網(wǎng)上,2021/11/15 這天創(chuàng)建了一個(gè)新的特性:JEP draft: Virtual Threads (Preview)虛擬線程,我們來(lái)看看是什么鬼:虛擬線程是一種成本低廉、輕量級(jí)的用戶模式的線程實(shí)現(xiàn),它可以充分利用可用硬件,大幅減少編寫、維護(hù)和監(jiān)測(cè)高并發(fā)應(yīng)用的工作量。低成本+輕量級(jí)+用戶態(tài),這一看就是協(xié)程?的定義了。。我們都知道使用線程是要十分注意的,因?yàn)榫€程的創(chuàng)建、銷毀都十分消耗系統(tǒng)資源,所以有了線程池,但這還不夠,因?yàn)榫€程的數(shù)量是有限的,線程會(huì)阻塞操作系統(tǒng)線程,無(wú)法盡可能的提高吞吐量。因?yàn)槭褂镁€程的成本很高,所以才會(huì)有了虛擬線程,它是用戶態(tài)線程,成本是相當(dāng)?shù)土模{(diào)度也完全由用戶進(jìn)行控制(JDK 中的調(diào)度器),它同樣可以進(jìn)行阻塞,但不用阻塞操作系統(tǒng)線程,充分提高了硬件利用率,高并發(fā)也上了一個(gè)量級(jí),從而實(shí)現(xiàn)了高吞吐量。虛擬線程創(chuàng)建方式:虛擬線程是
java.lang.Thread的一個(gè)實(shí)現(xiàn),可以使用
java.lang.Thread.Builder接口創(chuàng)建,如下所示:
Thread?thread?=?Thread.ofVirtual()
?????.name("javastack")
?????.unstarted(runnable);
也可能會(huì)通過(guò)一個(gè)線程工廠類進(jìn)行創(chuàng)建:
ThreadFactory?factory?=?Thread.ofVirtual().factory();
并且,可以通過(guò) Thread.isVirtual() 方法判斷是否虛擬線程。