java 線程池 求各位大神,Java多線程看哪本書(shū)好?
求各位大神,Java多線程看哪本書(shū)好?推薦Java并發(fā)編程練習(xí)本書(shū)。本書(shū)從并發(fā)和線程安全的基本概念出發(fā),介紹如何使用類庫(kù)提供的基本并發(fā)構(gòu)建塊來(lái)避免并發(fā)風(fēng)險(xiǎn)、構(gòu)造線程安全類和驗(yàn)證線程安全規(guī)則。如何將較小
求各位大神,Java多線程看哪本書(shū)好?
推薦Java并發(fā)編程練習(xí)本書(shū)。
本書(shū)從并發(fā)和線程安全的基本概念出發(fā),介紹如何使用類庫(kù)提供的基本并發(fā)構(gòu)建塊來(lái)避免并發(fā)風(fēng)險(xiǎn)、構(gòu)造線程安全類和驗(yàn)證線程安全規(guī)則。
如何將較小的線程安全類組合成較大的線程安全類,如何使用線程提高并發(fā)應(yīng)用程序的吞吐量,如何識(shí)別可并行執(zhí)行的任務(wù),如何提高單行程序子系統(tǒng)的響應(yīng)能力,如何確保并發(fā)程序執(zhí)行預(yù)期的任務(wù),以及如何提高并發(fā)代碼的性能和可擴(kuò)展性。
最后,介紹了一些高級(jí)主題,如顯式鎖定、原子變量、非阻塞算法以及如何開(kāi)發(fā)自定義同步工具類。
總之,本書(shū)介紹完整,原理分析透徹。我希望我的回答能幫助你。
今年大三了,學(xué)了一年多的Java,可是都在說(shuō)go用的越來(lái)越多了,很多人都已經(jīng)轉(zhuǎn)go了,請(qǐng)問(wèn)我該怎么辦?
14年來(lái),有人說(shuō)Java將要消亡,那時(shí)Java仍然是中國(guó)的主流。17年來(lái),有人說(shuō)Java真的不行了,那時(shí)Java還是中國(guó)的主流。19年來(lái),有人說(shuō)Java不再好了,他們都在用python。然而,Java和C仍然是中國(guó)的主流。最后,在2020年,另一批不處于it地位的人說(shuō)Java已經(jīng)不好了,go和python是主流。你相信有一群培訓(xùn)機(jī)構(gòu)嗎???你知道java生態(tài)有多好嗎?你知道有多少java開(kāi)發(fā)需要維護(hù)嗎?你知道一家公司突然改變技術(shù)方向要花多少錢嗎?
2020年學(xué)習(xí)java好還是學(xué)習(xí)python好?Java程序員飽和了嗎?
至于Java或python,這取決于職業(yè)規(guī)劃。
您可以檢查每種語(yǔ)言的歷史記錄。隨著技術(shù)和硬件的進(jìn)步,歷史上許多流行語(yǔ)言已經(jīng)被淘汰或正在衰落。
但市場(chǎng)上唯一不變的是算法的基本要求。算法和數(shù)據(jù)結(jié)構(gòu)是基本技能。從MySQL默認(rèn)存儲(chǔ)引擎的B樹(shù)到redis的哈希,所有的軟件都離不開(kāi)基本的數(shù)據(jù)結(jié)構(gòu)和算法。
具有高性能要求(如響應(yīng)時(shí)間和QPS)的技術(shù)公司基本上都是Java。各種中間件、微服務(wù)和業(yè)務(wù)邏輯開(kāi)發(fā)基本上都是用redis實(shí)現(xiàn)的java。
有些性能要求很高,可能使用C。
壽命很短。我用python。選擇Python意味著擁有一個(gè)龐大的Python生態(tài)系統(tǒng)。從爬蟲(chóng)、數(shù)據(jù)分析、人工智能、網(wǎng)站背景等,基本上都有現(xiàn)成的框架或工具。
但是Python的一個(gè)大漏洞是Gil,而多線程基本上是雞肋。
Python的性能比Java差得多。有些公司從Python開(kāi)始。Python無(wú)法處理隨后的業(yè)務(wù)擴(kuò)展。如果你沒(méi)記錯(cuò)的話,你就餓了,你知道接下來(lái)的業(yè)務(wù)已經(jīng)轉(zhuǎn)移到Java了,最核心的功能已經(jīng)用Java重寫(xiě)了。
語(yǔ)言只是手段,核心是算法。至于如何選擇,應(yīng)該結(jié)合職業(yè)規(guī)劃和具體領(lǐng)域。
為什么Java堅(jiān)持多線程不選擇協(xié)程?
Java從發(fā)明的第一天起就被定義為多線程網(wǎng)絡(luò)編程語(yǔ)言。Java最大的特點(diǎn)不是跨平臺(tái),而是它的多線程模型(當(dāng)時(shí),C中沒(méi)有線程,正如我們現(xiàn)在看到的,C還沒(méi)有出現(xiàn))。因?yàn)榻陙?lái)軟件產(chǎn)業(yè)的增長(zhǎng)主要來(lái)自于網(wǎng)絡(luò)編程。網(wǎng)絡(luò)編程中最常見(jiàn)的模式是客戶機(jī)/服務(wù)器(client/server,又稱C/s),這種編程模式需要在服務(wù)器端同時(shí)接受客戶機(jī)的請(qǐng)求,即具有良好的并發(fā)特性,主要依賴于多線程技術(shù)。Java的主戰(zhàn)場(chǎng)是服務(wù)器端編程。因此,多線程技術(shù)對(duì)Java來(lái)說(shuō)是非常重要和不可缺少的。
當(dāng)我們要引入?yún)f(xié)處理時(shí),我們要解決哪些問(wèn)題。我認(rèn)為這只不過(guò)是以下幾點(diǎn):
節(jié)省資源,重量輕,具體來(lái)說(shuō):節(jié)省內(nèi)存,每個(gè)線程需要分配一段堆棧內(nèi)存,內(nèi)核中的一些資源,節(jié)省分配線程的開(kāi)銷(創(chuàng)建和銷毀線程每次需要做一個(gè)系統(tǒng)調(diào)用),節(jié)省了線程切換帶來(lái)的大量開(kāi)銷,配合NiO實(shí)現(xiàn)無(wú)阻塞編程,提高了系統(tǒng)的吞吐量,使用起來(lái)更方便。另外,async await(異步運(yùn)行,但寫(xiě)起來(lái)感覺(jué)是同步的)我們分開(kāi)來(lái)談。
讓我們從記憶開(kāi)始。以javaweb編程為例,Tomcat上woker線程池的最大線程數(shù)一般配置在50到500之間(spring boot的默認(rèn)值是200)。也就是說(shuō),可以同時(shí)接受的請(qǐng)求太多了。如果超過(guò)最大值,請(qǐng)求將被拒絕。如果每個(gè)線程提供128KB,則500個(gè)線程的內(nèi)存消耗約為60MB。如果存在瓶頸,可能在CPU、IO、帶寬、DB-CPU等方面存在瓶頸,但是對(duì)于通常為數(shù)GB的Java運(yùn)行時(shí)進(jìn)程來(lái)說(shuō),內(nèi)存量的增加似乎不是一個(gè)大問(wèn)題。