日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 技術(shù)前線
[導(dǎo)讀]線程池是現(xiàn)代并發(fā)編程中最常用的工具之一,幾乎所有主流編程語(yǔ)言(Java、C++、Python、Go等)都內(nèi)置了線程池實(shí)現(xiàn)。它通過(guò)預(yù)先創(chuàng)建并管理一組線程,避免了頻繁創(chuàng)建和銷(xiāo)毀線程的開(kāi)銷(xiāo),提高了系統(tǒng)的并發(fā)性能和穩(wěn)定性。但很多開(kāi)發(fā)者在使用線程池時(shí),往往只關(guān)注參數(shù)配置,卻忽略了線程池設(shè)計(jì)背后的底層邏輯。

線程池是現(xiàn)代并發(fā)編程中最常用的工具之一,幾乎所有主流編程語(yǔ)言(Java、C++、Python、Go等)都內(nèi)置了線程池實(shí)現(xiàn)。它通過(guò)預(yù)先創(chuàng)建并管理一組線程,避免了頻繁創(chuàng)建和銷(xiāo)毀線程的開(kāi)銷(xiāo),提高了系統(tǒng)的并發(fā)性能和穩(wěn)定性。但很多開(kāi)發(fā)者在使用線程池時(shí),往往只關(guān)注參數(shù)配置,卻忽略了線程池設(shè)計(jì)背后的底層邏輯。為什么線程池要分為核心線程、最大線程、任務(wù)隊(duì)列?為什么拒絕策略有四種?為什么要區(qū)分核心線程和非核心線程?本文將從系統(tǒng)資源約束、并發(fā)性能優(yōu)化、故障容錯(cuò)設(shè)計(jì)三個(gè)維度,深入剖析線程池設(shè)計(jì)的底層邏輯,幫助你真正理解線程池的設(shè)計(jì)精髓。

一、資源約束:線程不是越多越好

線程的本質(zhì)與成本

要理解線程池的設(shè)計(jì),首先要明白線程的本質(zhì)和創(chuàng)建線程的成本。在操作系統(tǒng)中,線程是CPU調(diào)度和分配的基本單位,每個(gè)線程都需要占用一定的系統(tǒng)資源:

內(nèi)存開(kāi)銷(xiāo):每個(gè)線程都有自己的??臻g(Java中默認(rèn)1MB),創(chuàng)建1000個(gè)線程就需要至少1GB的內(nèi)存;此外,線程的控制塊(TCB)還需要占用額外的內(nèi)存。

CPU開(kāi)銷(xiāo):線程的創(chuàng)建和銷(xiāo)毀需要操作系統(tǒng)內(nèi)核完成,涉及到用戶態(tài)和內(nèi)核態(tài)的切換,這個(gè)過(guò)程非常耗時(shí);線程的調(diào)度也需要CPU資源,當(dāng)線程數(shù)量超過(guò)CPU核心數(shù)時(shí),會(huì)導(dǎo)致上下文切換頻繁,CPU利用率反而下降。

資源競(jìng)爭(zhēng):線程數(shù)量過(guò)多會(huì)導(dǎo)致線程之間競(jìng)爭(zhēng)CPU、內(nèi)存、IO等資源,反而會(huì)降低系統(tǒng)的并發(fā)性能。

? 為什么限制線程數(shù)量?

基于線程的成本,我們很容易得出結(jié)論:線程不是越多越好,過(guò)多的線程會(huì)導(dǎo)致系統(tǒng)資源耗盡,甚至崩潰。因此,線程池的核心設(shè)計(jì)目標(biāo)之一就是限制線程的數(shù)量,避免資源耗盡。

但線程數(shù)量也不能太少,如果線程數(shù)量過(guò)少,會(huì)導(dǎo)致CPU資源閑置,無(wú)法充分利用系統(tǒng)的并發(fā)能力。因此,線程池的設(shè)計(jì)需要在資源消耗和并發(fā)性能之間找到一個(gè)平衡點(diǎn)。

二、核心設(shè)計(jì):從"無(wú)限制線程"到"分層調(diào)度"

線程池的核心組成部分

主流線程池(如Java的ThreadPoolExecutor)的核心組成部分包括:核心線程數(shù)(corePoolSize)、最大線程數(shù)(maximumPoolSize)、任務(wù)隊(duì)列(workQueue)、拒絕策略(RejectedExecutionHandler)。這種分層設(shè)計(jì)并不是憑空想出來(lái)的,而是經(jīng)過(guò)多年實(shí)踐總結(jié)出的最優(yōu)解。

讓我們從"無(wú)限制線程"的問(wèn)題出發(fā),一步步推導(dǎo)線程池的設(shè)計(jì)邏輯:

問(wèn)題1:無(wú)限制創(chuàng)建線程 → 資源耗盡

如果我們不對(duì)線程數(shù)量進(jìn)行限制,當(dāng)任務(wù)數(shù)量激增時(shí),會(huì)創(chuàng)建大量線程,導(dǎo)致內(nèi)存耗盡、CPU上下文切換頻繁,最終系統(tǒng)崩潰。

解決方案1:固定大小線程池 → 任務(wù)排隊(duì)

為了限制線程數(shù)量,我們可以使用固定大小的線程池,預(yù)先創(chuàng)建N個(gè)線程,當(dāng)任務(wù)數(shù)量超過(guò)線程數(shù)量時(shí),將任務(wù)放入隊(duì)列中等待執(zhí)行。這種設(shè)計(jì)避免了資源耗盡,但當(dāng)任務(wù)隊(duì)列過(guò)長(zhǎng)時(shí),會(huì)導(dǎo)致任務(wù)等待時(shí)間過(guò)長(zhǎng),系統(tǒng)響應(yīng)延遲增加。

問(wèn)題2:固定大小線程池 → 響應(yīng)延遲

固定大小線程池的問(wèn)題在于,當(dāng)任務(wù)數(shù)量突然激增時(shí),隊(duì)列中的任務(wù)會(huì)越來(lái)越多,新任務(wù)需要等待很長(zhǎng)時(shí)間才能執(zhí)行,導(dǎo)致系統(tǒng)響應(yīng)延遲增加。

解決方案2:動(dòng)態(tài)調(diào)整線程數(shù) → 核心線程+最大線程

為了在資源消耗和響應(yīng)延遲之間找到平衡,線程池引入了核心線程和最大線程的概念:

核心線程:線程池長(zhǎng)期保持的線程數(shù)量,即使線程空閑也不會(huì)銷(xiāo)毀(除非設(shè)置了allowCoreThreadTimeOut),用于處理日常的任務(wù)負(fù)載。

最大線程:線程池允許創(chuàng)建的最大線程數(shù)量,當(dāng)任務(wù)隊(duì)列滿了之后,會(huì)創(chuàng)建非核心線程來(lái)處理任務(wù),任務(wù)完成后,非核心線程會(huì)在空閑一段時(shí)間后被銷(xiāo)毀,避免資源浪費(fèi)。

這種設(shè)計(jì)的好處在于:

當(dāng)任務(wù)負(fù)載較低時(shí),使用核心線程處理任務(wù),避免線程頻繁創(chuàng)建和銷(xiāo)毀的開(kāi)銷(xiāo);

當(dāng)任務(wù)負(fù)載激增時(shí),臨時(shí)創(chuàng)建非核心線程處理任務(wù),減少任務(wù)排隊(duì)時(shí)間,降低系統(tǒng)響應(yīng)延遲;

當(dāng)任務(wù)負(fù)載下降時(shí),銷(xiāo)毀非核心線程,釋放系統(tǒng)資源。

任務(wù)隊(duì)列的設(shè)計(jì)邏輯

任務(wù)隊(duì)列是線程池的重要組成部分,用于存儲(chǔ)等待執(zhí)行的任務(wù)。不同的任務(wù)隊(duì)列實(shí)現(xiàn)有不同的適用場(chǎng)景,常見(jiàn)的任務(wù)隊(duì)列類(lèi)型包括:

有界阻塞隊(duì)列(如ArrayBlockingQueue):限制隊(duì)列的大小,當(dāng)隊(duì)列滿了之后,會(huì)觸發(fā)拒絕策略。這種設(shè)計(jì)避免了任務(wù)隊(duì)列無(wú)限增長(zhǎng)導(dǎo)致的內(nèi)存耗盡問(wèn)題,適用于對(duì)系統(tǒng)穩(wěn)定性要求較高的場(chǎng)景。

無(wú)界阻塞隊(duì)列(如LinkedBlockingQueue):隊(duì)列大小沒(méi)有限制,任務(wù)可以無(wú)限加入隊(duì)列中。這種設(shè)計(jì)適用于任務(wù)數(shù)量變化較大,但任務(wù)執(zhí)行時(shí)間較短的場(chǎng)景,但存在內(nèi)存耗盡的風(fēng)險(xiǎn)。

優(yōu)先級(jí)隊(duì)列(如PriorityBlockingQueue):根據(jù)任務(wù)的優(yōu)先級(jí)排序,優(yōu)先執(zhí)行優(yōu)先級(jí)高的任務(wù)。這種設(shè)計(jì)適用于對(duì)任務(wù)執(zhí)行順序有要求的場(chǎng)景。

同步隊(duì)列(如SynchronousQueue):不存儲(chǔ)任務(wù),直接將任務(wù)交給線程執(zhí)行,如果沒(méi)有空閑線程,會(huì)創(chuàng)建新線程(直到達(dá)到最大線程數(shù))。這種設(shè)計(jì)適用于任務(wù)執(zhí)行時(shí)間較短,且需要快速處理的場(chǎng)景。

為什么線程池要在核心線程滿了之后先將任務(wù)放入隊(duì)列,而不是直接創(chuàng)建非核心線程?這是為了避免線程頻繁創(chuàng)建和銷(xiāo)毀的開(kāi)銷(xiāo)。如果每當(dāng)核心線程滿了就創(chuàng)建非核心線程,當(dāng)任務(wù)負(fù)載波動(dòng)較大時(shí),會(huì)導(dǎo)致線程頻繁創(chuàng)建和銷(xiāo)毀,反而增加了系統(tǒng)開(kāi)銷(xiāo)。通過(guò)任務(wù)隊(duì)列緩沖任務(wù),可以減少線程的創(chuàng)建和銷(xiāo)毀次數(shù),提高系統(tǒng)的穩(wěn)定性。

三、拒絕策略:資源耗盡時(shí)的自我保護(hù)

為什么需要拒絕策略?

當(dāng)任務(wù)隊(duì)列滿了,且線程數(shù)量已經(jīng)達(dá)到最大線程數(shù)時(shí),如果還有新任務(wù)提交,線程池?zé)o法處理這些任務(wù),此時(shí)需要采取拒絕策略。拒絕策略的設(shè)計(jì)是為了在資源耗盡時(shí)保護(hù)系統(tǒng),避免系統(tǒng)崩潰。

主流線程池的拒絕策略通常有以下四種:

AbortPolicy:直接拋出RejectedExecutionException異常,阻止系統(tǒng)正常運(yùn)行。這是默認(rèn)的拒絕策略,適用于對(duì)系統(tǒng)穩(wěn)定性要求較高的場(chǎng)景,可以及時(shí)發(fā)現(xiàn)并處理問(wèn)題。

CallerRunsPolicy:由提交任務(wù)的線程自己執(zhí)行任務(wù)。這種策略可以降低系統(tǒng)的負(fù)載,但會(huì)導(dǎo)致提交任務(wù)的線程被阻塞,影響系統(tǒng)的響應(yīng)速度。

DiscardPolicy:直接丟棄新任務(wù),不做任何處理。這種策略適用于對(duì)任務(wù)丟失不敏感的場(chǎng)景,如日志采集、數(shù)據(jù)統(tǒng)計(jì)等。

DiscardOldestPolicy:丟棄隊(duì)列中最舊的任務(wù),將新任務(wù)加入隊(duì)列中。這種策略可以保證新任務(wù)被執(zhí)行,但會(huì)導(dǎo)致舊任務(wù)丟失,適用于對(duì)任務(wù)實(shí)時(shí)性要求較高的場(chǎng)景。

拒絕策略的設(shè)計(jì)邏輯

拒絕策略的設(shè)計(jì)體現(xiàn)了線程池的自我保護(hù)機(jī)制。當(dāng)系統(tǒng)資源耗盡時(shí),線程池不能無(wú)限制地接受任務(wù),否則會(huì)導(dǎo)致系統(tǒng)崩潰。通過(guò)拒絕策略,線程池可以在資源耗盡時(shí)采取適當(dāng)?shù)拇胧?,保護(hù)系統(tǒng)的穩(wěn)定性。

選擇拒絕策略需要根據(jù)具體的業(yè)務(wù)場(chǎng)景:

如果任務(wù)非常重要,不能丟失,應(yīng)選擇AbortPolicy,及時(shí)發(fā)現(xiàn)并處理問(wèn)題;

如果任務(wù)允許一定的延遲,應(yīng)選擇CallerRunsPolicy,降低系統(tǒng)負(fù)載;

如果任務(wù)可以丟失,應(yīng)選擇DiscardPolicy或DiscardOldestPolicy,保證系統(tǒng)的穩(wěn)定性。

四、性能優(yōu)化:從"單一隊(duì)列"到"分而治之"

線程池的性能瓶頸

雖然線程池的分層設(shè)計(jì)已經(jīng)解決了資源耗盡和響應(yīng)延遲的問(wèn)題,但在高并發(fā)場(chǎng)景下,線程池仍然存在性能瓶頸:

任務(wù)隊(duì)列競(jìng)爭(zhēng):當(dāng)多個(gè)線程同時(shí)從任務(wù)隊(duì)列中獲取任務(wù)時(shí),會(huì)導(dǎo)致隊(duì)列的鎖競(jìng)爭(zhēng),降低系統(tǒng)的并發(fā)性能。

線程負(fù)載不均衡:任務(wù)隊(duì)列中的任務(wù)執(zhí)行時(shí)間可能差異很大,導(dǎo)致某些線程一直在執(zhí)行長(zhǎng)任務(wù),而其他線程空閑,CPU利用率不高。

高性能線程池的設(shè)計(jì)優(yōu)化

為了解決線程池的性能瓶頸,高性能線程池(如Java的ForkJoinPool、Netty的EventLoopGroup)采用了以下優(yōu)化設(shè)計(jì):

任務(wù)竊取算法(Work Stealing):每個(gè)線程都有自己的任務(wù)隊(duì)列,當(dāng)線程完成自己隊(duì)列中的任務(wù)后,會(huì)從其他線程的隊(duì)列中竊取任務(wù)執(zhí)行。這種設(shè)計(jì)減少了任務(wù)隊(duì)列的鎖競(jìng)爭(zhēng),提高了系統(tǒng)的并發(fā)性能。

任務(wù)拆分:將大任務(wù)拆分成多個(gè)小任務(wù),并行執(zhí)行,最后合并結(jié)果。這種設(shè)計(jì)適用于計(jì)算密集型任務(wù),可以充分利用CPU的并發(fā)能力。

線程隔離:將不同類(lèi)型的任務(wù)分配到不同的線程池執(zhí)行,避免不同類(lèi)型的任務(wù)之間相互影響。例如,將IO密集型任務(wù)和計(jì)算密集型任務(wù)分配到不同的線程池執(zhí)行,提高系統(tǒng)的整體性能。

線程池參數(shù)的調(diào)優(yōu)邏輯

線程池參數(shù)的調(diào)優(yōu)是一個(gè)復(fù)雜的過(guò)程,需要根據(jù)具體的業(yè)務(wù)場(chǎng)景和系統(tǒng)資源進(jìn)行調(diào)整。以下是一些通用的調(diào)優(yōu)原則:

CPU密集型任務(wù):線程數(shù)量應(yīng)設(shè)置為CPU核心數(shù)+1,避免上下文切換頻繁。

IO密集型任務(wù):線程數(shù)量應(yīng)設(shè)置為CPU核心數(shù)*2或更高,因?yàn)榫€程大部分時(shí)間在等待IO操作,需要更多的線程來(lái)充分利用CPU資源。

混合類(lèi)型任務(wù):將任務(wù)分為CPU密集型和IO密集型,分別使用不同的線程池執(zhí)行,避免相互影響。

任務(wù)隊(duì)列大小:任務(wù)隊(duì)列的大小應(yīng)根據(jù)線程數(shù)量和任務(wù)執(zhí)行時(shí)間來(lái)確定,避免隊(duì)列過(guò)大導(dǎo)致響應(yīng)延遲增加,或隊(duì)列過(guò)小導(dǎo)致拒絕任務(wù)。

五、故障容錯(cuò):從"單一錯(cuò)誤"到"全局穩(wěn)定"

線程池的故障容錯(cuò)設(shè)計(jì)

線程池不僅要提高系統(tǒng)的并發(fā)性能,還要保證系統(tǒng)的穩(wěn)定性。主流線程池的故障容錯(cuò)設(shè)計(jì)包括:

線程異常處理:當(dāng)線程執(zhí)行任務(wù)時(shí)拋出異常,線程池會(huì)捕獲異常,并創(chuàng)建新線程替換該線程,避免線程池因單個(gè)線程異常而癱瘓。

線程監(jiān)控:線程池提供了監(jiān)控接口,可以查看線程池的狀態(tài)、任務(wù)數(shù)量、線程數(shù)量等信息,及時(shí)發(fā)現(xiàn)并處理問(wèn)題。

優(yōu)雅關(guān)閉:線程池提供了優(yōu)雅關(guān)閉的方法,允許在關(guān)閉時(shí)等待隊(duì)列中的任務(wù)執(zhí)行完成,避免任務(wù)丟失。

為什么要區(qū)分核心線程和非核心線程?

很多開(kāi)發(fā)者不理解為什么線程池要區(qū)分核心線程和非核心線程,其實(shí)這也是故障容錯(cuò)設(shè)計(jì)的一部分。核心線程是線程池的"骨架",即使系統(tǒng)負(fù)載較低,也需要保持核心線程的運(yùn)行,避免系統(tǒng)在任務(wù)負(fù)載突然增加時(shí)無(wú)法及時(shí)響應(yīng)。非核心線程是線程池的"肌肉",用于處理臨時(shí)的任務(wù)負(fù)載,當(dāng)任務(wù)負(fù)載下降時(shí),可以銷(xiāo)毀非核心線程,釋放系統(tǒng)資源。

這種設(shè)計(jì)可以在系統(tǒng)穩(wěn)定性和資源利用率之間找到平衡,既保證了系統(tǒng)在負(fù)載波動(dòng)時(shí)的響應(yīng)能力,又避免了資源的浪費(fèi)。

線程池的設(shè)計(jì)邏輯并不是憑空想象出來(lái)的,而是基于系統(tǒng)資源約束、并發(fā)性能優(yōu)化、故障容錯(cuò)設(shè)計(jì)三個(gè)核心維度,經(jīng)過(guò)多年實(shí)踐總結(jié)出的最優(yōu)解。從限制線程數(shù)量到分層調(diào)度,從任務(wù)隊(duì)列緩沖到拒絕策略自我保護(hù),從性能優(yōu)化到故障容錯(cuò),每一個(gè)設(shè)計(jì)細(xì)節(jié)都體現(xiàn)了資源與性能的平衡藝術(shù)。

理解線程池的設(shè)計(jì)邏輯,不僅能幫助我們更好地使用線程池,還能讓我們?cè)谟龅讲l(fā)問(wèn)題時(shí)從底層分析原因,找到最優(yōu)的解決方案。在實(shí)際項(xiàng)目中,我們應(yīng)該根據(jù)具體的業(yè)務(wù)場(chǎng)景和系統(tǒng)資源,合理配置線程池的參數(shù),選擇合適的任務(wù)隊(duì)列和拒絕策略,以達(dá)到系統(tǒng)穩(wěn)定性和并發(fā)性能的最佳平衡。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在Java應(yīng)用性能調(diào)優(yōu)的實(shí)踐中,堆外內(nèi)存(Off-Heap Memory)的管理始終是一塊難啃的硬骨頭。 當(dāng)多數(shù)開(kāi)發(fā)者將注意力集中在堆內(nèi)內(nèi)存的GC優(yōu)化時(shí),堆外內(nèi)存的異常增長(zhǎng)往往成為壓垮應(yīng)用的最后一根稻草。

關(guān)鍵字: 內(nèi)存 Java

【2025年7月15日, 德國(guó)慕尼黑訊】隨著各國(guó)政府加速推進(jìn)數(shù)字化轉(zhuǎn)型,全球?qū)﹄娮由矸葑C件(eID)的需求持續(xù)增長(zhǎng)。為了更加快速、靈活地響應(yīng)這一領(lǐng)域的高速迭代需求,全球功率系統(tǒng)和物聯(lián)網(wǎng)領(lǐng)域的半導(dǎo)體領(lǐng)導(dǎo)者英飛凌科技股份公司...

關(guān)鍵字: 半導(dǎo)體 控制器 Java

在當(dāng)今快速發(fā)展的技術(shù)環(huán)境中,有效管理和利用數(shù)據(jù)對(duì)于任何業(yè)務(wù)或應(yīng)用程序都至關(guān)重要。 NoSQL 數(shù)據(jù)庫(kù)已成為傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)的替代品,提供靈活性、可擴(kuò)展性和性能優(yōu)勢(shì)。當(dāng)與 Java(一種強(qiáng)大且廣泛使用的編程語(yǔ)言)結(jié)合使用時(shí),...

關(guān)鍵字: Java NoSQL

在并發(fā)編程中,鎖是保護(hù)共享資源的重要機(jī)制。然而,不正確的鎖使用可能會(huì)導(dǎo)致性能下降、死鎖等問(wèn)題。因此,對(duì)鎖進(jìn)行調(diào)優(yōu)是提高并發(fā)程序性能和穩(wěn)定性的關(guān)鍵之一。

關(guān)鍵字: 編程 Java

Java是一種廣泛應(yīng)用于軟件開(kāi)發(fā)的編程語(yǔ)言,它具有跨平臺(tái)、面向?qū)ο蠛透叨瓤煽啃缘奶攸c(diǎn)。在嵌入式系統(tǒng)設(shè)計(jì)中,Java也有著廣泛的應(yīng)用方案。本文將詳細(xì)介紹Java在嵌入式系統(tǒng)設(shè)計(jì)中的應(yīng)用方案,并分析其優(yōu)勢(shì)和挑戰(zhàn)。

關(guān)鍵字: Java 軟件開(kāi)發(fā) 編程語(yǔ)言

嵌入式系統(tǒng)是指集成了計(jì)算機(jī)軟硬件的特定系統(tǒng),通常用于控制和監(jiān)控設(shè)備、機(jī)器和系統(tǒng)。Java作為一種通用的編程語(yǔ)言,在嵌入式系統(tǒng)的開(kāi)發(fā)中也有廣泛的應(yīng)用。下面將介紹一些嵌入式系統(tǒng)中Java的開(kāi)發(fā)工具和解決方案。

關(guān)鍵字: 嵌入式 計(jì)算機(jī) Java

Java語(yǔ)言是一種面向?qū)ο蟮木幊陶Z(yǔ)言,由Sun Microsystems(現(xiàn)在是Oracle Corporation)于1995年推出。Java具有跨平臺(tái)性和可移植性的特點(diǎn),廣泛用于開(kāi)發(fā)各種應(yīng)用程序,包括嵌入式系統(tǒng)、移動(dòng)...

關(guān)鍵字: Java 編程語(yǔ)言 互聯(lián)網(wǎng)

12月7日消息,近日,Java全球管理組織JCP披露了最高執(zhí)行委員會(huì)(JCP-EC)新成員名單,作為唯一中國(guó)代表,阿里巴巴再次連任,任期兩年。這是阿里連續(xù)三次入選JCP最高管理席位,代表著中國(guó)技術(shù)公司長(zhǎng)期參與Java全球...

關(guān)鍵字: 阿里云 Java

經(jīng)常有一些小伙伴來(lái)咨詢二哥培訓(xùn)機(jī)構(gòu)方面的問(wèn)題,通常情況下,如果自學(xué)能力可以的話,我是建議通過(guò)《Java 程序員進(jìn)階之路》配上 B 站的教學(xué)視頻,先把 Java 后端四大件學(xué)扎實(shí)(Java 基礎(chǔ)、Spring Boot、R...

關(guān)鍵字: Java 培訓(xùn)機(jī)構(gòu) 算法

Java是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。Java語(yǔ)言作為靜態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,極好地實(shí)現(xiàn)了面向...

關(guān)鍵字: Java C++
關(guān)閉