項(xiàng)目中多線程使用場景 Java中的多線程,并發(fā)知識(shí)在實(shí)際項(xiàng)目中的什么地方可以應(yīng)用呢?
Java中的多線程,并發(fā)知識(shí)在實(shí)際項(xiàng)目中的什么地方可以應(yīng)用呢?在java開發(fā)中,多線程通常用于并行處理一些業(yè)務(wù),如同時(shí)響應(yīng)多個(gè)用戶的請求,或并行啟動(dòng)API處理、并發(fā)數(shù)據(jù)庫訪問等其優(yōu)點(diǎn)如下:(1)多線程
Java中的多線程,并發(fā)知識(shí)在實(shí)際項(xiàng)目中的什么地方可以應(yīng)用呢?
在java開發(fā)中,多線程通常用于并行處理一些業(yè)務(wù),如同時(shí)響應(yīng)多個(gè)用戶的請求,或并行啟動(dòng)API處理、并發(fā)數(shù)據(jù)庫訪問等
其優(yōu)點(diǎn)如下:
(1)多線程提高了服務(wù)器的CPU利用率或計(jì)算機(jī);
(2)多線程實(shí)現(xiàn)了并發(fā)處理能力,提高了訪問能力;
(3)節(jié)省了等待帶來的各種成本。最典型的應(yīng)用程序,如tomcat、tomcat,是多線程的,數(shù)百個(gè)客戶機(jī)訪問同一個(gè)web應(yīng)用程序。在Tomcat訪問之后,隨后的處理被拋出到一個(gè)新線程。新線程最終被調(diào)用到我們的servlet程序,比如doGet或doPost。
如果我們不使用多線程機(jī)制,當(dāng)數(shù)百人同時(shí)訪問一個(gè)web應(yīng)用程序時(shí),Tomcat將不得不排隊(duì)等待串行處理,因此客戶端根本無法忍受這種訪問速度。
還需要異步處理,您需要使用多線程。例如,任務(wù)a和任務(wù)B需要并行處理,單個(gè)線程只能串行處理。首先完成任務(wù)a,然后執(zhí)行任務(wù)B,如果要同時(shí)執(zhí)行多個(gè)任務(wù),必須為每個(gè)任務(wù)分配一個(gè)線程,然后通過Java虛擬機(jī)的線程調(diào)度,同時(shí)執(zhí)行多個(gè)任務(wù)。例如,如果您的CPU是多核的,那么您可以讓CPU執(zhí)行一個(gè)線程。如果只有一個(gè)CPU,底層基于分時(shí)復(fù)用的原則,每個(gè)線程根據(jù)時(shí)間片獲得CPU資源。
實(shí)際工作中,什么場景會(huì)用到多線程開發(fā)?
多線程是用來提高程序效率的。假設(shè)有一個(gè)程序,要求用戶輸入多個(gè)公式,計(jì)算結(jié)果,并分別打印在屏幕上。如果用戶沒有一直輸入,就無法計(jì)算,更不用說打印了。如果用戶有輸入,則必須完成所有輸入,然后才能計(jì)算結(jié)果并將其打印到屏幕上。
對于線程,一個(gè)用于等待用戶輸入,一個(gè)用于計(jì)算結(jié)果,一個(gè)用于打印。用戶輸入公式3時(shí),計(jì)算線程為計(jì)算公式2,打印線程為打印公式1。三個(gè)線程同時(shí)運(yùn)行,減少了等待時(shí)間,從而提高了運(yùn)行效率
其中一個(gè)重要因素與操作系統(tǒng)和平臺(tái)有關(guān)。附近有一個(gè)很好的例子。
在windows平臺(tái)上,由于效率問題和缺乏并行計(jì)算方案,8核16線程在大多數(shù)情況下可能是無用的。
但是在Linux平臺(tái)上是不一樣的,幾乎所有的科學(xué)計(jì)算或仿真軟件都是基于Linux平臺(tái)的,這種幾十萬的CPU使用太普遍了。
例如,目前所有的芯片設(shè)計(jì)軟件都是在Linux平臺(tái)上進(jìn)行的,特別是先進(jìn)技術(shù)(如7Nm)的設(shè)計(jì)極其復(fù)雜,設(shè)計(jì)規(guī)模巨大(100億設(shè)備規(guī)模)。使用幾十個(gè)或幾百個(gè)cpu和簡單線程運(yùn)行模擬是很常見的。
所以學(xué)習(xí)一個(gè)并行計(jì)算工具或模擬軟件,你會(huì)發(fā)現(xiàn)8核和16線程有時(shí)是不夠的