大家都說Java的併發非常優秀。我理解所謂“Java的併發”至少有兩部分:標準庫中的java.util.concurrent和JVM中的實現。問題1:JVM中關於併發的部分,是否真的比其它VM要優秀?比如.Net, Erlang VM。如果是,體現在什麼地方?問題2:Doug Lea寫的java.util.concurrent備受推崇。請問它比其它語言的併發標準庫強在什麼地方?問題3:我在網上搜索了一些關於併發的benchmark。Haskell,Erlang,Go等語言的各種庫/框架/平臺,都紛紛宣稱自己的併發全球最快。
回覆列表
-
1 # IT人劉俊明
-
2 # marry2017584
併發備受推崇,跟現在網際網路火熱有關吧。現在移動APP服務端應該以Java居多,現在的BATJ使用Java比較多,原因吧,比較多,Java相對穩定,社群活躍,開源免費,從業人員多等等吧。
-
3 # Java幫幫
併發,在作業系統中,是指一個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同一個處理機上執行,但任一個時刻點上只有一個程式在處理機上執行。
併發解決了很多問題在電商中比較常見,天貓雙十一就離不開併發,如果沒有強大的技術支撐,是沒法實現百億的交易量的,在秒殺中併發也是必不可少的,現在很多人模擬秒殺使用redis資料庫,但是在真正實際專案中並不是那麼簡單,要配合高深的執行緒能力才能完成。
Java語言的生態比較完善或者說相對成熟,而你搜所的其他也對併發比較好,就和“王婆賣瓜自賣自誇”一樣的道理,從某種角度說他們也支援併發,但是如果從平臺開發,加上長久和併發,乃至於大資料,我相信沒有一種語言敢和Java叫板
首先回答為什麼java的併發備受推崇?
Java語言把面向物件,可移植和多執行緒作為其最重要的三個標籤,可見多執行緒在java開發中的重要性。
Java語言的多執行緒併發可以簡單分為兩個階段:java1.5之前和java1.5之後。
我先說1.5之前,這也是奠定了java在併發領域地位的階段。這個階段當別的語言還在使用程序排程的時候,java已經開始能透過Runnable和Thread來建立自己的執行緒了。java提供了synchronized來同步臨界區,提出了wait/notify來等待-通知提出了執行緒區域性變數和Timer框架,還有java程式設計師熟悉的三池兩態。可以說在這個階段java無疑是領先的,也奠定了它的併發處理的地位。
第二個階段是1.5之後。可以說這個階段來的有點晚,由於眾所周知的原因java的母公司經歷了一些列的變故,導致很多工作被迫推遲,但是1.5的變化還是可喜的,其中一個重要的變化就是加強了併發處理的能力。這個版本提出了併發工具包,也就是java.util.concurrent包,解決了之前Runnable沒有返回值,以及鎖難以管理等問題。透過atomic包解決了變數的安全操作,透過locks包提供了鎖的靈活管理等等。另外還有就是Fork/Join框架的使用,讓併發操作可以更加靈活方便。這階段的更新,讓java在併發方面更強大了。
最後,java跟其他語言比,它併發真的快麼?我感覺是不是最快,應該看市場的選擇,至少目前java的併發能力得到了檢市場的檢驗。你文中提到的框架,有的我並沒有使用過,就不做過多解讀了。